crc32.js 790 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. 'use strict';
  2. // Note: we can't get significant speed boost here.
  3. // So write code to minimize size - no pregenerated tables
  4. // and array tools dependencies.
  5. // Use ordinary array, since untyped makes no boost here
  6. function makeTable() {
  7. var c, table = [];
  8. for (var n = 0; n < 256; n++) {
  9. c = n;
  10. for (var k = 0; k < 8; k++) {
  11. c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
  12. }
  13. table[n] = c;
  14. }
  15. return table;
  16. }
  17. // Create table on load. Just 255 signed longs. Not a problem.
  18. var crcTable = makeTable();
  19. function crc32(crc, buf, len, pos) {
  20. var t = crcTable,
  21. end = pos + len;
  22. crc ^= -1;
  23. for (var i = pos; i < end; i++) {
  24. crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
  25. }
  26. return (crc ^ (-1)); // >>> 0;
  27. }
  28. module.exports = crc32;