2
* @fileoverview CRC32 実装.
4
goog.provide('Zlib.CRC32');
6
goog.require('USE_TYPEDARRAY');
8
/** @define {boolean} */
9
var ZLIB_CRC32_COMPACT = false;
11
goog.scope(function() {
15
* @param {!(Array.<number>|Uint8Array)} data data byte array.
16
* @param {number=} pos data position.
17
* @param {number=} length data length.
18
* @return {number} CRC32.
20
Zlib.CRC32.calc = function(data, pos, length) {
21
return Zlib.CRC32.update(data, 0, pos, length);
26
* @param {!(Array.<number>|Uint8Array)} data data byte array.
27
* @param {number} crc CRC32.
28
* @param {number=} pos data position.
29
* @param {number=} length data length.
30
* @return {number} CRC32.
32
Zlib.CRC32.update = function(data, crc, pos, length) {
33
var table = Zlib.CRC32.Table;
34
var i = (typeof pos === 'number') ? pos : (pos = 0);
35
var il = (typeof length === 'number') ? length : data.length;
39
// loop unrolling for performance
40
for (i = il & 7; i--; ++pos) {
41
crc = (crc >>> 8) ^ table[(crc ^ data[pos]) & 0xff];
43
for (i = il >> 3; i--; pos += 8) {
44
crc = (crc >>> 8) ^ table[(crc ^ data[pos ]) & 0xff];
45
crc = (crc >>> 8) ^ table[(crc ^ data[pos + 1]) & 0xff];
46
crc = (crc >>> 8) ^ table[(crc ^ data[pos + 2]) & 0xff];
47
crc = (crc >>> 8) ^ table[(crc ^ data[pos + 3]) & 0xff];
48
crc = (crc >>> 8) ^ table[(crc ^ data[pos + 4]) & 0xff];
49
crc = (crc >>> 8) ^ table[(crc ^ data[pos + 5]) & 0xff];
50
crc = (crc >>> 8) ^ table[(crc ^ data[pos + 6]) & 0xff];
51
crc = (crc >>> 8) ^ table[(crc ^ data[pos + 7]) & 0xff];
54
return (crc ^ 0xffffffff) >>> 0;
62
Zlib.CRC32.single = function(num, crc) {
63
return (Zlib.CRC32.Table[(num ^ crc) & 0xff] ^ (num >>> 8)) >>> 0;
67
* @type {Array.<number>}
72
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
73
0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
74
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
75
0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
76
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
77
0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
78
0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
79
0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
80
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
81
0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
82
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
83
0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
84
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
85
0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
86
0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
87
0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
88
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
89
0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
90
0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
91
0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
92
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
93
0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
94
0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
95
0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
96
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
97
0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
98
0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
99
0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
100
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
101
0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
102
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
103
0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
104
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
105
0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
106
0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
107
0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
108
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
109
0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
110
0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
111
0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
112
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
113
0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
114
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
118
* @type {!(Array.<number>|Uint32Array)} CRC-32 Table.
121
Zlib.CRC32.Table = ZLIB_CRC32_COMPACT ? (function() {
122
/** @type {!(Array.<number>|Uint32Array)} */
123
var table = new (USE_TYPEDARRAY ? Uint32Array : Array)(256);
124
/** @type {number} */
126
/** @type {number} */
128
/** @type {number} */
131
for (i = 0; i < 256; ++i) {
133
for (j = 0; j < 8; ++j) {
134
c = (c & 1) ? (0xedB88320 ^ (c >>> 1)) : (c >>> 1);
140
})() : USE_TYPEDARRAY ? new Uint32Array(Zlib.CRC32.Table_) : Zlib.CRC32.Table_;