mirror of
https://github.com/retspen/webvirtcloud
synced 2024-11-01 20:14:15 +00:00
33 lines
748 B
JavaScript
33 lines
748 B
JavaScript
|
"use strict";
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.default = adler32;
|
||
|
// Note: adler32 takes 12% for level 0 and 2% for level 6.
|
||
|
// It doesn't worth to make additional optimizationa as in original.
|
||
|
// Small size is preferable.
|
||
|
|
||
|
function adler32(adler, buf, len, pos) {
|
||
|
var s1 = adler & 0xffff | 0,
|
||
|
s2 = adler >>> 16 & 0xffff | 0,
|
||
|
n = 0;
|
||
|
|
||
|
while (len !== 0) {
|
||
|
// 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 = s1 + buf[pos++] | 0;
|
||
|
s2 = s2 + s1 | 0;
|
||
|
} while (--n);
|
||
|
|
||
|
s1 %= 65521;
|
||
|
s2 %= 65521;
|
||
|
}
|
||
|
|
||
|
return s1 | s2 << 16 | 0;
|
||
|
}
|