Sha256: 010edfbccf205caed65418382119e28565411dbca7a2c21eea33372574358146
Contents?: true
Size: 1.34 KB
Versions: 1
Compression:
Stored size: 1.34 KB
Contents
/* * MurmurHashAligned2 (C) Austin Appleby */ #include "murmurhash_aligned2.h" uint32_t murmur_hash_process_aligned2(const char * key, uint32_t len, uint32_t seed) { const uint32_t m = 0x5bd1e995; const int r = 24; uint32_t h = seed ^ len; const unsigned char * data = (const unsigned char *)key; while(len >= 4) { uint32_t k; k = data[0]; k |= data[1] << 8; k |= data[2] << 16; k |= data[3] << 24; k *= m; k ^= k >> r; k *= m; h *= m; h ^= k; data += 4; len -= 4; } switch(len) { case 3: h ^= data[2] << 16; case 2: h ^= data[1] << 8; case 1: h ^= data[0]; h *= m; }; h ^= h >> 13; h *= m; h ^= h >> 15; return h; } VALUE murmur_aligned2_finish(VALUE self) { uint8_t digest[4]; uint32_t h; h = _murmur_finish32(self, murmur_hash_process_aligned2); assign_by_endian_32(digest, h); return rb_str_new((const char*) digest, 4); } VALUE murmur_aligned2_s_digest(int argc, VALUE *argv, VALUE klass) { uint8_t digest[4]; uint64_t h; h = _murmur_s_digest32(argc, argv, klass, murmur_hash_process_aligned2); assign_by_endian_32(digest, h); return rb_str_new((const char*) digest, 4); } VALUE murmur_aligned2_s_rawdigest(int argc, VALUE *argv, VALUE klass) { return ULL2NUM(_murmur_s_digest32(argc, argv, klass, murmur_hash_process_aligned2)); }
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
digest-murmurhash-1.0.0 | ext/digest/murmurhash/murmurhash_aligned2.c |