module MurmurHash3::V128
Public Instance Methods
murmur3_128_fmix(p1)
click to toggle source
static VALUE rb_fmix64(VALUE self, VALUE integer) { #if SIZEOF_LONG == 8 uint64_t _int = NUM2ULONG(integer); return ULONG2NUM(fmix64(_int)); #else uint64_t _int = NUM2ULL(integer); return ULL2NUM(fmix64(_int)); #endif }
murmur3_128_int32_hash(*args)
click to toggle source
static VALUE rb_murmur3_128_int32_hash(int argc, VALUE* argv, VALUE self) { VALUE ar_result; uint32_t result[4], _int; if (argc == 0 || argc > 2) { rb_raise(rb_eArgError, "accept 1 or 2 arguments: (int32[, seed])"); } _int = NUM2UINT(argv[0]); MurmurHash3_x64_128(&_int, 4, argc == 1 ? 0 : NUM2UINT(argv[1]), result); #if WORDS_BIGENDIAN SWAP_128_BIT(); #endif RETURN_128_BIT(); }
murmur3_128_int64_hash(*args)
click to toggle source
static VALUE rb_murmur3_128_int64_hash(int argc, VALUE* argv, VALUE self) { VALUE ar_result; uint32_t result[4]; uint64_t _int; if (argc == 0 || argc > 2) { rb_raise(rb_eArgError, "accept 1 or 2 arguments: (int64[, seed])"); } #if SIZEOF_LONG == 8 _int = NUM2ULONG(argv[0]); #else _int = NUM2ULL(argv[0]); #endif MurmurHash3_x64_128(&_int, 8, argc == 1 ? 0 : NUM2UINT(argv[1]), result); #if WORDS_BIGENDIAN SWAP_128_BIT(); #endif RETURN_128_BIT(); }
murmur3_128_str_base64digest(*args)
click to toggle source
static VALUE rb_murmur3_128_str_base64digest(int argc, VALUE *argv, VALUE self) { union { uint32_t result[4]; unsigned char res[18]; } r; char out[24]; int i; rb_murmur3_128_hash(argc, argv, self, r.result); #if WORDS_BIGENDIAN SWAP_128_BIT_BYTE(); #endif r.res[16] = 0; r.res[17] = 0; for(i = 0; i<6; i++) { uint32_t b64 = ((uint32_t)r.res[i*3+0] << 16) | ((uint32_t)r.res[i*3+1] << 8) | (uint32_t)r.res[i*3+2]; out[i*4+0] = base64[(b64 >> 18) & 0x3f]; out[i*4+1] = base64[(b64 >> 12) & 0x3f]; out[i*4+2] = base64[(b64 >> 6) & 0x3f]; out[i*4+3] = base64[(b64 >> 0) & 0x3f]; } out[22] = '='; out[23] = '='; return rb_str_new(out, sizeof(out)); }
murmur3_128_str_digest(*args)
click to toggle source
static VALUE rb_murmur3_128_str_digest(int argc, VALUE *argv, VALUE self) { union { uint32_t result[4]; char res[16]; } r; rb_murmur3_128_hash(argc, argv, self, r.result); #if WORDS_BIGENDIAN SWAP_128_BIT_BYTE(); #endif return rb_str_new(r.res, sizeof(r.res)); }
murmur3_128_str_hash(*args)
click to toggle source
static VALUE rb_murmur3_128_str_hash(int argc, VALUE* argv, VALUE self) { VALUE ar_result; uint32_t result[4]; rb_murmur3_128_hash(argc, argv, self, result); #if WORDS_BIGENDIAN SWAP_128_BIT(); #endif RETURN_128_BIT(); }
murmur3_128_str_hexdigest(*args)
click to toggle source
static VALUE rb_murmur3_128_str_hexdigest(int argc, VALUE *argv, VALUE self) { union { uint32_t result[4]; unsigned char res[16]; } r; char out[32]; int i; rb_murmur3_128_hash(argc, argv, self, r.result); #if WORDS_BIGENDIAN SWAP_128_BIT_BYTE(); #endif for(i = 0; i<16; i++) { out[i*2] = hex[r.res[i]*2]; out[i*2+1] = hex[r.res[i]*2+1]; } return rb_str_new(out, sizeof(out)); }