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
						
					
					
				| "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);
 | |
|     }
 | |
| };
 |