murmurhash 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +0 -0
- data/ext/murmurhash/extconf.rb +3 -0
- data/ext/murmurhash/murmurhash.c +59 -0
- data/lib/murmurhash.rb +4 -0
- metadata +48 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c6513d7c953acb5a8037c43749308c5e75754a6c
|
4
|
+
data.tar.gz: b557b9315a2e7d65e861bd89e6112aa4059b08c6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 385ca12c021cc24043f165f505741a607fdcc53ce63814da3dfd3b03fee70424015d51f09b6bb5906a397d4e695c91aa6201144ffd62ae277f9dcafc89c31842
|
7
|
+
data.tar.gz: 9f20710e4ef599584998db3277840409e2e0e132e8fceb926c40677c0a01ec6ca54a21f0b0b031a4eaf2923507a5da6e1845f8b0eb87aede7222d49e9f859d42
|
data/LICENSE
ADDED
File without changes
|
@@ -0,0 +1,59 @@
|
|
1
|
+
#include "ruby.h"
|
2
|
+
#include <stdint.h>
|
3
|
+
|
4
|
+
|
5
|
+
/* murmur hash 64A implementation */
|
6
|
+
VALUE hash_64_2A(VALUE self, VALUE value) {
|
7
|
+
int64_t buf_len = RSTRING_LEN(value);
|
8
|
+
char* buf = RSTRING_PTR(value);
|
9
|
+
|
10
|
+
const int32_t seed = 0x1234ABCDL;
|
11
|
+
const int64_t m = 0xc6a4a7935bd1e995LL;
|
12
|
+
const int r = 47;
|
13
|
+
|
14
|
+
int64_t h = seed ^ (buf_len * m);
|
15
|
+
|
16
|
+
int64_t * data = (int64_t *)buf;
|
17
|
+
int64_t * end = data + (buf_len / 8);
|
18
|
+
|
19
|
+
while(data != end)
|
20
|
+
{
|
21
|
+
int64_t k = *data++;
|
22
|
+
|
23
|
+
k *= m;
|
24
|
+
uint64_t k1 = k;
|
25
|
+
k ^= k1 >> r;
|
26
|
+
k *= m;
|
27
|
+
|
28
|
+
h ^= k;
|
29
|
+
h *= m;
|
30
|
+
}
|
31
|
+
|
32
|
+
char * data2 = (char*)data;
|
33
|
+
|
34
|
+
switch(buf_len & 7)
|
35
|
+
{
|
36
|
+
case 7: h ^= (int64_t)data2[6] << 48;
|
37
|
+
case 6: h ^= (int64_t)data2[5] << 40;
|
38
|
+
case 5: h ^= (int64_t)data2[4] << 32;
|
39
|
+
case 4: h ^= (int64_t)data2[3] << 24;
|
40
|
+
case 3: h ^= (int64_t)data2[2] << 16;
|
41
|
+
case 2: h ^= (int64_t)data2[1] << 8;
|
42
|
+
case 1: h ^= (int64_t)data2[0];
|
43
|
+
h *= m;
|
44
|
+
};
|
45
|
+
|
46
|
+
uint64_t h1 = h;
|
47
|
+
h ^= h1 >> r;
|
48
|
+
h *= m;
|
49
|
+
uint64_t h2 = h;
|
50
|
+
h ^= h2 >> r;
|
51
|
+
|
52
|
+
return LL2NUM(h);
|
53
|
+
}
|
54
|
+
|
55
|
+
void Init_murmurhash() {
|
56
|
+
VALUE Murmurhash = rb_define_module("Murmurhash");
|
57
|
+
rb_define_module_function(Murmurhash, "hash2A", hash_64_2A, 1);
|
58
|
+
}
|
59
|
+
|
data/lib/murmurhash.rb
ADDED
metadata
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: murmurhash
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- ted@ximalaya.com
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-01-03 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: murmur hash alogrithm
|
14
|
+
email: ted@ximalaya.com
|
15
|
+
executables: []
|
16
|
+
extensions:
|
17
|
+
- ext/murmurhash/extconf.rb
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- LICENSE
|
21
|
+
- ext/murmurhash/extconf.rb
|
22
|
+
- ext/murmurhash/murmurhash.c
|
23
|
+
- lib/murmurhash.rb
|
24
|
+
homepage: http://www.ximalaya.com
|
25
|
+
licenses:
|
26
|
+
- MIT
|
27
|
+
metadata: {}
|
28
|
+
post_install_message:
|
29
|
+
rdoc_options: []
|
30
|
+
require_paths:
|
31
|
+
- lib
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - '>='
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0'
|
37
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
requirements: []
|
43
|
+
rubyforge_project:
|
44
|
+
rubygems_version: 2.0.3
|
45
|
+
signing_key:
|
46
|
+
specification_version: 4
|
47
|
+
summary: Many hash alogrithm.
|
48
|
+
test_files: []
|