43
43
namespace algorithm
46
uint32_t crc32(const char *key, size_t key_length);
46
static const uint32_t crc32tab[256] = {
47
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
48
0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
49
0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
50
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
51
0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
52
0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
53
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
54
0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
55
0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
56
0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
57
0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
58
0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
59
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
60
0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
61
0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
62
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
63
0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
64
0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
65
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
66
0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
67
0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
68
0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
69
0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
70
0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
71
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
72
0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
73
0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
74
0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
75
0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
76
0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
77
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
78
0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
79
0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
80
0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
81
0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
82
0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
83
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
84
0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
85
0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
86
0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
87
0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
88
0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
89
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
90
0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
91
0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
92
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
93
0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
94
0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
95
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
96
0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
97
0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
98
0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
99
0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
100
0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
101
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
102
0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
103
0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
104
0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
105
0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
106
0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
107
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
108
0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
109
0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
110
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
114
uint32_t crc32(T key, size_t key_length)
117
uint32_t crc= UINT32_MAX;
119
for (x= 0; x < key_length; x++)
120
crc= (crc >> 8) ^ crc32tab[(crc ^ static_cast<uint8_t>(key[x])) & 0xff];
48
125
} /* namespace algorithm */
49
126
} /* namespace drizzled */