1'use strict'; 2 3// Note: adler32 takes 12% for level 0 and 2% for level 6. 4// It doesn't worth to make additional optimizationa as in original. 5// Small size is preferable. 6 7function adler32(adler, buf, len, pos) { 8 var s1 = (adler & 0xffff) |0 9 , s2 = ((adler >>> 16) & 0xffff) |0 10 , n = 0; 11 12 while (len !== 0) { 13 // Set limit ~ twice less than 5552, to keep 14 // s2 in 31-bits, because we force signed ints. 15 // in other case %= will fail. 16 n = len > 2000 ? 2000 : len; 17 len -= n; 18 19 do { 20 s1 = (s1 + buf[pos++]) |0; 21 s2 = (s2 + s1) |0; 22 } while (--n); 23 24 s1 %= 65521; 25 s2 %= 65521; 26 } 27 28 return (s1 | (s2 << 16)) |0; 29} 30 31 32module.exports = adler32; 33