You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

node-murmurhash

Package Overview
Dependencies
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

node-murmurhash - npm Package Compare versions

Comparing version

to
2.1.0

5

History.md
2.1.0 / 2015-11-26
==================
* feat: use Math.imul (@alsotang)
2.0.1 / 2015-07-21

@@ -3,0 +8,0 @@ ==================

68

lib/murmur.js

@@ -22,39 +22,19 @@ /**!

// @zhangzifa: c语言中,大于127的char, 在转成 int 时, 表示成0xffffffxx的形式
var NEGTIVE_MAP = [
0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb,
0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,
0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b,
0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53,
0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b,
0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0xffffff80, 0xffffff81, 0xffffff82, 0xffffff83, 0xffffff84, 0xffffff85,
0xffffff86, 0xffffff87, 0xffffff88, 0xffffff89, 0xffffff8a, 0xffffff8b,
0xffffff8c, 0xffffff8d, 0xffffff8e, 0xffffff8f, 0xffffff90, 0xffffff91,
0xffffff92, 0xffffff93, 0xffffff94, 0xffffff95, 0xffffff96, 0xffffff97,
0xffffff98, 0xffffff99, 0xffffff9a, 0xffffff9b, 0xffffff9c, 0xffffff9d,
0xffffff9e, 0xffffff9f, 0xffffffa0, 0xffffffa1, 0xffffffa2, 0xffffffa3,
0xffffffa4, 0xffffffa5, 0xffffffa6, 0xffffffa7, 0xffffffa8, 0xffffffa9,
0xffffffaa, 0xffffffab, 0xffffffac, 0xffffffad, 0xffffffae, 0xffffffaf,
0xffffffb0, 0xffffffb1, 0xffffffb2, 0xffffffb3, 0xffffffb4, 0xffffffb5,
0xffffffb6, 0xffffffb7, 0xffffffb8, 0xffffffb9, 0xffffffba, 0xffffffbb,
0xffffffbc, 0xffffffbd, 0xffffffbe, 0xffffffbf, 0xffffffc0, 0xffffffc1,
0xffffffc2, 0xffffffc3, 0xffffffc4, 0xffffffc5, 0xffffffc6, 0xffffffc7,
0xffffffc8, 0xffffffc9, 0xffffffca, 0xffffffcb, 0xffffffcc, 0xffffffcd,
0xffffffce, 0xffffffcf, 0xffffffd0, 0xffffffd1, 0xffffffd2, 0xffffffd3,
0xffffffd4, 0xffffffd5, 0xffffffd6, 0xffffffd7, 0xffffffd8, 0xffffffd9,
0xffffffda, 0xffffffdb, 0xffffffdc, 0xffffffdd, 0xffffffde, 0xffffffdf,
0xffffffe0, 0xffffffe1, 0xffffffe2, 0xffffffe3, 0xffffffe4, 0xffffffe5,
0xffffffe6, 0xffffffe7, 0xffffffe8, 0xffffffe9, 0xffffffea, 0xffffffeb,
0xffffffec, 0xffffffed, 0xffffffee, 0xffffffef, 0xfffffff0, 0xfffffff1,
0xfffffff2, 0xfffffff3, 0xfffffff4, 0xfffffff5, 0xfffffff6, 0xfffffff7,
0xfffffff8, 0xfffffff9, 0xfffffffa, 0xfffffffb, 0xfffffffc, 0xfffffffd,
0xfffffffe, 0xffffffff
];
function negative(num) {
if (num < 127) {
return num;
}
return num | 0xffffff00
}
var imul = (function () {
if (Math.imul) {
return Math.imul;
} else {
return function (a, b) {
return ((((a >> 16) * b) & 0xffff) << 16) + ((a & 0xffff) * b)
}
}
})()
function murmurhash2js(key, seed) {

@@ -74,8 +54,8 @@ var l = key.length;

// 此处两个 32 位整数相乘时,有可能产生 64 位的结果,导致精度丢失。
k = (((k & 0xffff) * MURMURHASH_M) + ((((k >>> 16) * MURMURHASH_M) & 0xffff) << 16));
k = imul(k, MURMURHASH_M)
k ^= k >>> 24;
k = (((k & 0xffff) * MURMURHASH_M) + ((((k >>> 16) * MURMURHASH_M) & 0xffff) << 16));
k = imul(k, MURMURHASH_M)
h = (((h & 0xffff) * MURMURHASH_M) + ((((h >>> 16) * MURMURHASH_M) & 0xffff) << 16)) ^ k;
h = imul(h, MURMURHASH_M) ^ k

@@ -88,12 +68,12 @@ l -= 4;

case 3:
h ^= NEGTIVE_MAP[key[i + 2]] << 16;
h ^= negative(key[i + 2]) << 16;
case 2:
h ^= NEGTIVE_MAP[key[i + 1]] << 8;
h ^= negative(key[i + 1]) << 8;
case 1:
h ^= NEGTIVE_MAP[key[i]];
h = (((h & 0xffff) * MURMURHASH_M) + ((((h >>> 16) * MURMURHASH_M) & 0xffff) << 16));
h ^= negative(key[i]);
h = imul(h, MURMURHASH_M)
}
h ^= h >>> 13;
h = (((h & 0xffff) * MURMURHASH_M) + ((((h >>> 16) * MURMURHASH_M) & 0xffff) << 16));
h = imul(h, MURMURHASH_M)
h ^= h >>> 15;

@@ -100,0 +80,0 @@

@@ -17,2 +17,3 @@ /**!

/**

@@ -19,0 +20,0 @@ * Murmur hash v2

{
"name": "node-murmurhash",
"version": "2.0.1",
"version": "2.1.0",
"description": "murmurhash V2, support utf8 Buffer",

@@ -5,0 +5,0 @@ "main": "lib/murmurhash.js",

@@ -46,12 +46,11 @@ node-murmurhash

```
cpu: 1.4 GHz Intel Core i5
node version: v2.3.0, date: Tue Jul 21 2015 17:35:09 GMT+0800 (CST)
node version: v4.2.1, date: Sun Nov 15 2015 01:01:49 GMT+0800 (CST)
Starting...
2 tests completed.
murmurhash(new Buffer('haha, this is key')) x 6,626,182 ops/sec ±1.89% (80 runs sampled)
murmurhash(new Buffer('hello 中国')) x 8,510,543 ops/sec ±2.24% (80 runs sampled)
murmurhash(new Buffer(ascii)) x 21,164,676 ops/sec ±0.85% (98 runs sampled)
murmurhash(new Buffer(utf8)) x 13,926,544 ops/sec ±0.59% (99 runs sampled)
```
see also: [benchmark.md](benchmark.md)
see also: [benchmark](test/benchmark.js)

@@ -58,0 +57,0 @@ ## License