Comparing version 0.1.0 to 0.2.0
@@ -13,11 +13,11 @@ /* adler32.js (C) 2014 SheetJS -- http://sheetjs.com */ | ||
for(var i = 0; i < L;) { | ||
M = Math.min(L-i, 3854); | ||
for(;M>0;--M) { | ||
a += bstr.charCodeAt(i++); | ||
M = Math.min(L-i, 3850)+i; | ||
for(;i<M;i++) { | ||
a += bstr.charCodeAt(i); | ||
b += a; | ||
} | ||
a %= 65521; | ||
b %= 65521; | ||
a = (15*(a>>>16)+(a&65535)) | ||
b = (15*(b>>>16)+(b&65535)) | ||
} | ||
return b > 32767 ? (((b - 65536) * 65536) | a) : ((b * 65536) | a); | ||
return ((b%65521) << 16) | (a%65521); | ||
} | ||
@@ -28,11 +28,11 @@ | ||
for(var i = 0; i < L;) { | ||
M = Math.min(L-i, 3854); | ||
for(;M>0;--M) { | ||
a += buf[i++]; | ||
M = Math.min(L-i, 3850)+i; | ||
for(;i<M;i++) { | ||
a += buf[i]; | ||
b += a; | ||
} | ||
a %= 65521; | ||
b %= 65521; | ||
a = (15*(a>>>16)+(a&65535)) | ||
b = (15*(b>>>16)+(b&65535)) | ||
} | ||
return b > 32767 ? (((b - 65536) * 65536) | a) : ((b * 65536) | a); | ||
return ((b%65521) << 16) | (a%65521); | ||
} | ||
@@ -66,3 +66,3 @@ | ||
} | ||
return b > 32767 ? (((b - 65536) * 65536) | a) : ((b * 65536) | a); | ||
return (b << 16) | a; | ||
} | ||
@@ -69,0 +69,0 @@ ADLER32.bstr = adler32_bstr; |
@@ -8,11 +8,11 @@ /* consult README.md for the magic number */ | ||
for(var i = 0; i < L;) { | ||
M = Math.min(L-i, 3854); | ||
for(;M>0;--M) { | ||
a += bstr.charCodeAt(i++); | ||
M = Math.min(L-i, 3850)+i; | ||
for(;i<M;i++) { | ||
a += bstr.charCodeAt(i); | ||
b += a; | ||
} | ||
a %= 65521; | ||
b %= 65521; | ||
a = (15*(a>>>16)+(a&65535)) | ||
b = (15*(b>>>16)+(b&65535)) | ||
} | ||
return b > 32767 ? (((b - 65536) * 65536) | a) : ((b * 65536) | a); | ||
return ((b%65521) << 16) | (a%65521); | ||
} | ||
@@ -23,11 +23,11 @@ | ||
for(var i = 0; i < L;) { | ||
M = Math.min(L-i, 3854); | ||
for(;M>0;--M) { | ||
a += buf[i++]; | ||
M = Math.min(L-i, 3850)+i; | ||
for(;i<M;i++) { | ||
a += buf[i]; | ||
b += a; | ||
} | ||
a %= 65521; | ||
b %= 65521; | ||
a = (15*(a>>>16)+(a&65535)) | ||
b = (15*(b>>>16)+(b&65535)) | ||
} | ||
return b > 32767 ? (((b - 65536) * 65536) | a) : ((b * 65536) | a); | ||
return ((b%65521) << 16) | (a%65521); | ||
} | ||
@@ -61,3 +61,3 @@ | ||
} | ||
return b > 32767 ? (((b - 65536) * 65536) | a) : ((b * 65536) | a); | ||
return (b << 16) | a; | ||
} |
@@ -13,11 +13,11 @@ /* adler32.js (C) 2014 SheetJS -- http://sheetjs.com */ | ||
for(var i = 0; i < L;) { | ||
M = Math.min(L-i, 3854); | ||
for(;M>0;--M) { | ||
a += bstr.charCodeAt(i++); | ||
M = Math.min(L-i, 3850)+i; | ||
for(;i<M;i++) { | ||
a += bstr.charCodeAt(i); | ||
b += a; | ||
} | ||
a %= 65521; | ||
b %= 65521; | ||
a = (15*(a>>>16)+(a&65535)) | ||
b = (15*(b>>>16)+(b&65535)) | ||
} | ||
return b > 32767 ? (((b - 65536) * 65536) | a) : ((b * 65536) | a); | ||
return ((b%65521) << 16) | (a%65521); | ||
} | ||
@@ -28,11 +28,11 @@ | ||
for(var i = 0; i < L;) { | ||
M = Math.min(L-i, 3854); | ||
for(;M>0;--M) { | ||
a += buf[i++]; | ||
M = Math.min(L-i, 3850)+i; | ||
for(;i<M;i++) { | ||
a += buf[i]; | ||
b += a; | ||
} | ||
a %= 65521; | ||
b %= 65521; | ||
a = (15*(a>>>16)+(a&65535)) | ||
b = (15*(b>>>16)+(b&65535)) | ||
} | ||
return b > 32767 ? (((b - 65536) * 65536) | a) : ((b * 65536) | a); | ||
return ((b%65521) << 16) | (a%65521); | ||
} | ||
@@ -66,3 +66,3 @@ | ||
} | ||
return b > 32767 ? (((b - 65536) * 65536) | a) : ((b * 65536) | a); | ||
return (b << 16) | a; | ||
} | ||
@@ -69,0 +69,0 @@ ADLER32.bstr = adler32_bstr; |
{ | ||
"name": "adler-32", | ||
"version": "0.1.0", | ||
"version": "0.2.0", | ||
"author": "sheetjs", | ||
@@ -5,0 +5,0 @@ "description": "Pure-JS ADLER-32", |
@@ -1,3 +0,1 @@ | ||
var table = require('../').table; | ||
function sheetjs1(bstr) { | ||
@@ -17,3 +15,17 @@ var a = 1, b = 0, L = bstr.length; | ||
for(var i = 0; i < L;) { | ||
M = Math.min(L-i, 3854); | ||
M = Math.min(L-i, 3850)+i; | ||
for(;i<M;i++) { | ||
a += bstr.charCodeAt(i); | ||
b += a; | ||
} | ||
a = (15*(a>>>16)+(a&65535)) | ||
b = (15*(b>>>16)+(b&65535)) | ||
} | ||
return ((b%65521) << 16) | (a%65521); | ||
} | ||
function sheetjs3(bstr) { | ||
var a = 1, b = 0, L = bstr.length, M; | ||
for(var i = 0; i < L;) { | ||
M = Math.min(L-i, 5552); | ||
for(;M>0;--M) { | ||
@@ -29,12 +41,26 @@ a += bstr.charCodeAt(i++); | ||
var foobar = "foobarbazqux"; | ||
for(var i = 0; i != 11; ++i) foobar += " " + foobar; | ||
var foobar = [255,255,255,255,255,255].map(function(x) { return String.fromCharCode(x); }).join(""); | ||
foobar += foobar; | ||
foobar += foobar; | ||
foobar += foobar; | ||
foobar += foobar; | ||
foobar += foobar; | ||
foobar += foobar; | ||
foobar.charCodeAt(0); | ||
var m = 2048; | ||
var assert = require('assert'); | ||
assert.equal(sheetjs1(foobar), sheetjs2(foobar)); | ||
var BM = require('./bm'); | ||
var suite = new BM('binary string'); | ||
for(var i = 0; i != 14; ++i) { | ||
foobar += foobar; | ||
foobar.charCodeAt(0); | ||
assert.equal(sheetjs1(foobar), sheetjs3(foobar)); | ||
assert.equal(sheetjs1(foobar), sheetjs2(foobar)); | ||
//for(var j = 0; j != 200; ++j) assert.equal(sheetjs2(foobar), sheetjs3(foobar)); | ||
var suite = new BM('binary string (' + foobar.length + ')'); | ||
suite.add('sheetjs 1', function() { for(var j = 0; j != 1000; ++j) sheetjs1(foobar); }); | ||
suite.add('sheetjs 2', function() { for(var j = 0; j != 1000; ++j) sheetjs2(foobar); }); | ||
suite.run(); | ||
if(i<3) suite.add('sheetjs 1', function() { for(var j = 0; j != m; ++j) sheetjs1(foobar); }); | ||
suite.add('sheetjs 2', function() { for(var j = 0; j != m; ++j) sheetjs2(foobar); }); | ||
suite.add('sheetjs 3', function() { for(var j = 0; j != m; ++j) sheetjs3(foobar); }); | ||
suite.run(); | ||
m>>>=1; if(m < 10) m = 10; | ||
} |
@@ -54,2 +54,13 @@ # adler32 | ||
Bit twiddling is much faster than taking the mod on Safari and older Firefoxes. | ||
Instead of taking the literal mod 65521, it is faster to keep it in the integers | ||
by bit-shifting: `65536 ~ 15 mod 65521` so for nonnegative integer `a`: | ||
``` | ||
a = (a >>> 16) * 65536 + (a & 65535) [equality] | ||
a ~ (a >>> 16) * 15 + (a & 65535) mod 65521 | ||
``` | ||
The mod is taken at the very end, since the intermediate result may exceed 65521 | ||
## Magic Number | ||
@@ -56,0 +67,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
146855
5430
88