slightly optimized adler with forced casts

master
Vitaly Puzrin 2014-03-13 08:01:42 +04:00
rodzic 8a49fcd212
commit ccf2586dba
1 zmienionych plików z 9 dodań i 6 usunięć

Wyświetl plik

@ -5,24 +5,27 @@
// Small size is preferable.
function adler32(adler, buf, len, pos) {
var s1 = adler & 0xffff
, s2 = (adler >>> 16) & 0xffff
var s1 = (adler & 0xffff) |0
, s2 = ((adler >>> 16) & 0xffff) |0
, n = 0;
while (len !== 0) {
n = len > 5552 ? 5552 : len;
// Set limit ~ twice less than 5552, to keep
// s2 in 31-bits, because we force signed ints.
// in other case %= will fail.
n = len > 2000 ? 2000 : len;
len -= n;
do {
s1 += buf[pos++];
s2 += s1;
s1 = (s1 + buf[pos++]) |0;
s2 = (s2 + s1) |0;
} while (--n);
s1 %= 65521;
s2 %= 65521;
}
return (s1 | (s2 << 16));
return (s1 | (s2 << 16)) |0;
}