Acathur 4 anni fa
parent
commit
3e23afc4d7
4 ha cambiato i file con 118 aggiunte e 1 eliminazioni
  1. 2 0
      dist/hash/crc32.d.ts
  2. 55 0
      dist/hash/crc32.js
  3. 1 1
      package.json
  4. 60 0
      src/hash/crc32.ts

+ 2 - 0
dist/hash/crc32.d.ts

@@ -0,0 +1,2 @@
+declare function crc32(str: string): string;
+export default crc32;

+ 55 - 0
dist/hash/crc32.js

@@ -0,0 +1,55 @@
+var poly = 0xEDB88320; // reverse polynomial
+// build table
+function signed_crc_table() {
+    var c, n, k, table = new Array(256);
+    for (n = 0; n < 256; n++) {
+        c = n;
+        for (k = 0; k < 8; k++) {
+            if (c & 1) {
+                c = poly ^ (c >>> 1);
+            }
+            else {
+                c = c >>> 1;
+            }
+        }
+        table[n] = c >>> 0;
+    }
+    return typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;
+}
+var T = signed_crc_table();
+function crc32_str(str, seed = 0) {
+    var C = seed ^ -1;
+    for (var i = 0, L = str.length, c, d; i < L;) {
+        c = str.charCodeAt(i++);
+        if (c < 0x80) {
+            C = (C >>> 8) ^ T[(C ^ c) & 0xFF];
+        }
+        else if (c < 0x800) {
+            C = (C >>> 8) ^ T[(C ^ (192 | ((c >> 6) & 31))) & 0xFF];
+            C = (C >>> 8) ^ T[(C ^ (128 | (c & 63))) & 0xFF];
+        }
+        else if (c >= 0xD800 && c < 0xE000) {
+            c = (c & 1023) + 64;
+            d = str.charCodeAt(i++) & 1023;
+            C = (C >>> 8) ^ T[(C ^ (240 | ((c >> 8) & 7))) & 0xFF];
+            C = (C >>> 8) ^ T[(C ^ (128 | ((c >> 2) & 63))) & 0xFF];
+            C = (C >>> 8) ^ T[(C ^ (128 | ((d >> 6) & 15) | ((c & 3) << 4))) & 0xFF];
+            C = (C >>> 8) ^ T[(C ^ (128 | (d & 63))) & 0xFF];
+        }
+        else {
+            C = (C >>> 8) ^ T[(C ^ (224 | ((c >> 12) & 15))) & 0xFF];
+            C = (C >>> 8) ^ T[(C ^ (128 | ((c >> 6) & 63))) & 0xFF];
+            C = (C >>> 8) ^ T[(C ^ (128 | (c & 63))) & 0xFF];
+        }
+    }
+    return C ^ -1;
+}
+function decimalToHex(num) {
+    var str = (num >>> 0).toString(16);
+    var padLen = 8 - str.length;
+    return padLen > 0 ? new Array(padLen + 1).join('0') + str : str;
+}
+function crc32(str) {
+    return decimalToHex(crc32_str(str));
+}
+export default crc32;

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "proginn-lib",
-  "version": "0.5.0",
+  "version": "0.5.1",
   "description": "Proginn front-end common library.",
   "main": "dist/index.js",
   "module": "dist/index.js",

+ 60 - 0
src/hash/crc32.ts

@@ -0,0 +1,60 @@
+var poly = 0xEDB88320; // reverse polynomial
+
+// build table
+function signed_crc_table() {
+  var c, n, k, table = new Array(256)
+
+  for (n = 0; n < 256; n++) {
+    c = n
+    for (k = 0; k < 8; k++) {
+      if (c & 1) {
+        c = poly ^ (c >>> 1)
+      } else {
+        c = c >>> 1
+      }
+    }
+    table[n] = c >>> 0
+  }
+
+  return typeof Int32Array !== 'undefined' ? new Int32Array(table) : table
+}
+
+var T = signed_crc_table()
+
+function crc32_str(str: string, seed: number = 0) {
+  var C = seed ^ -1;
+  for (var i = 0, L = str.length, c, d; i < L;) {
+    c = str.charCodeAt(i++);
+    if (c < 0x80) {
+      C = (C >>> 8) ^ T[(C ^ c) & 0xFF];
+    } else if (c < 0x800) {
+      C = (C >>> 8) ^ T[(C ^ (192 | ((c >> 6) & 31))) & 0xFF];
+      C = (C >>> 8) ^ T[(C ^ (128 | (c & 63))) & 0xFF];
+    } else if (c >= 0xD800 && c < 0xE000) {
+      c = (c & 1023) + 64;
+      d = str.charCodeAt(i++) & 1023;
+      C = (C >>> 8) ^ T[(C ^ (240 | ((c >> 8) & 7))) & 0xFF];
+      C = (C >>> 8) ^ T[(C ^ (128 | ((c >> 2) & 63))) & 0xFF];
+      C = (C >>> 8) ^ T[(C ^ (128 | ((d >> 6) & 15) | ((c & 3) << 4))) & 0xFF];
+      C = (C >>> 8) ^ T[(C ^ (128 | (d & 63))) & 0xFF];
+    } else {
+      C = (C >>> 8) ^ T[(C ^ (224 | ((c >> 12) & 15))) & 0xFF];
+      C = (C >>> 8) ^ T[(C ^ (128 | ((c >> 6) & 63))) & 0xFF];
+      C = (C >>> 8) ^ T[(C ^ (128 | (c & 63))) & 0xFF];
+    }
+  }
+  return C ^ -1;
+}
+
+function decimalToHex(num: number) {
+  var str = (num >>> 0).toString(16)
+  var padLen = 8 - str.length
+
+  return padLen > 0 ? new Array(padLen + 1).join('0') + str : str
+}
+
+function crc32(str: string) {
+  return decimalToHex(crc32_str(str))
+}
+
+export default crc32