adler32.js 694 B

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