You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					78 lines
				
				1.9 KiB
			
		
		
			
		
	
	
					78 lines
				
				1.9 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var utils = require("./utils");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * The following functions come from pako, from pako/lib/zlib/crc32.js
							 | 
						||
| 
								 | 
							
								 * released under the MIT license, see pako https://github.com/nodeca/pako/
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Use ordinary array, since untyped makes no boost here
							 | 
						||
| 
								 | 
							
								function makeTable() {
							 | 
						||
| 
								 | 
							
								    var c, table = [];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for(var n =0; n < 256; n++){
							 | 
						||
| 
								 | 
							
								        c = n;
							 | 
						||
| 
								 | 
							
								        for(var k =0; k < 8; k++){
							 | 
						||
| 
								 | 
							
								            c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        table[n] = c;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return table;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Create table on load. Just 255 signed longs. Not a problem.
							 | 
						||
| 
								 | 
							
								var crcTable = makeTable();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function crc32(crc, buf, len, pos) {
							 | 
						||
| 
								 | 
							
								    var t = crcTable, end = pos + len;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    crc = crc ^ (-1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for (var i = pos; i < end; i++ ) {
							 | 
						||
| 
								 | 
							
								        crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return (crc ^ (-1)); // >>> 0;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// That's all for the pako functions.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Compute the crc32 of a string.
							 | 
						||
| 
								 | 
							
								 * This is almost the same as the function crc32, but for strings. Using the
							 | 
						||
| 
								 | 
							
								 * same function for the two use cases leads to horrible performances.
							 | 
						||
| 
								 | 
							
								 * @param {Number} crc the starting value of the crc.
							 | 
						||
| 
								 | 
							
								 * @param {String} str the string to use.
							 | 
						||
| 
								 | 
							
								 * @param {Number} len the length of the string.
							 | 
						||
| 
								 | 
							
								 * @param {Number} pos the starting position for the crc32 computation.
							 | 
						||
| 
								 | 
							
								 * @return {Number} the computed crc32.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								function crc32str(crc, str, len, pos) {
							 | 
						||
| 
								 | 
							
								    var t = crcTable, end = pos + len;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    crc = crc ^ (-1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for (var i = pos; i < end; i++ ) {
							 | 
						||
| 
								 | 
							
								        crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return (crc ^ (-1)); // >>> 0;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = function crc32wrapper(input, crc) {
							 | 
						||
| 
								 | 
							
								    if (typeof input === "undefined" || !input.length) {
							 | 
						||
| 
								 | 
							
								        return 0;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var isArray = utils.getTypeOf(input) !== "string";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if(isArray) {
							 | 
						||
| 
								 | 
							
								        return crc32(crc|0, input, input.length, 0);
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        return crc32str(crc|0, input, input.length, 0);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								};
							 |