1717#include < type_traits>
1818#include < string_view>
1919
20- // CRC32 Table (zlib polynomial) static
21- constexpr uint32_t crc_table[256 ] = {0x0L , 0x77073096L , 0xee0e612cL ,
22- 0x990951baL , 0x76dc419L , 0x706af48fL , 0xe963a535L , 0x9e6495a3L , 0xedb8832L ,
23- 0x79dcb8a4L , 0xe0d5e91eL , 0x97d2d988L , 0x9b64c2bL , 0x7eb17cbdL , 0xe7b82d07L ,
24- 0x90bf1d91L , 0x1db71064L , 0x6ab020f2L , 0xf3b97148L , 0x84be41deL , 0x1adad47dL ,
25- 0x6ddde4ebL , 0xf4d4b551L , 0x83d385c7L , 0x136c9856L , 0x646ba8c0L , 0xfd62f97aL ,
26- 0x8a65c9ecL , 0x14015c4fL , 0x63066cd9L , 0xfa0f3d63L , 0x8d080df5L , 0x3b6e20c8L ,
27- 0x4c69105eL , 0xd56041e4L , 0xa2677172L , 0x3c03e4d1L , 0x4b04d447L , 0xd20d85fdL ,
28- 0xa50ab56bL , 0x35b5a8faL , 0x42b2986cL , 0xdbbbc9d6L , 0xacbcf940L , 0x32d86ce3L ,
29- 0x45df5c75L , 0xdcd60dcfL , 0xabd13d59L , 0x26d930acL , 0x51de003aL , 0xc8d75180L ,
30- 0xbfd06116L , 0x21b4f4b5L , 0x56b3c423L , 0xcfba9599L , 0xb8bda50fL , 0x2802b89eL ,
31- 0x5f058808L , 0xc60cd9b2L , 0xb10be924L , 0x2f6f7c87L , 0x58684c11L , 0xc1611dabL ,
32- 0xb6662d3dL , 0x76dc4190L , 0x1db7106L , 0x98d220bcL , 0xefd5102aL , 0x71b18589L ,
33- 0x6b6b51fL , 0x9fbfe4a5L , 0xe8b8d433L , 0x7807c9a2L , 0xf00f934L , 0x9609a88eL ,
34- 0xe10e9818L , 0x7f6a0dbbL , 0x86d3d2dL , 0x91646c97L , 0xe6635c01L , 0x6b6b51f4L ,
35- 0x1c6c6162L , 0x856530d8L , 0xf262004eL , 0x6c0695edL , 0x1b01a57bL , 0x8208f4c1L ,
36- 0xf50fc457L , 0x65b0d9c6L , 0x12b7e950L , 0x8bbeb8eaL , 0xfcb9887cL , 0x62dd1ddfL ,
37- 0x15da2d49L , 0x8cd37cf3L , 0xfbd44c65L , 0x4db26158L , 0x3ab551ceL , 0xa3bc0074L ,
38- 0xd4bb30e2L , 0x4adfa541L , 0x3dd895d7L , 0xa4d1c46dL , 0xd3d6f4fbL , 0x4369e96aL ,
39- 0x346ed9fcL , 0xad678846L , 0xda60b8d0L , 0x44042d73L , 0x33031de5L , 0xaa0a4c5fL ,
40- 0xdd0d7cc9L , 0x5005713cL , 0x270241aaL , 0xbe0b1010L , 0xc90c2086L , 0x5768b525L ,
41- 0x206f85b3L , 0xb966d409L , 0xce61e49fL , 0x5edef90eL , 0x29d9c998L , 0xb0d09822L ,
42- 0xc7d7a8b4L , 0x59b33d17L , 0x2eb40d81L , 0xb7bd5c3bL , 0xc0ba6cadL , 0xedb88320L ,
43- 0x9abfb3b6L , 0x3b6e20cL , 0x74b1d29aL , 0xead54739L , 0x9dd277afL , 0x4db2615L ,
44- 0x73dc1683L , 0xe3630b12L , 0x94643b84L , 0xd6d6a3eL , 0x7a6a5aa8L , 0xe40ecf0bL ,
45- 0x9309ff9dL , 0xa00ae27L , 0x7d079eb1L , 0xf00f9344L , 0x8708a3d2L , 0x1e01f268L ,
46- 0x6906c2feL , 0xf762575dL , 0x806567cbL , 0x196c3671L , 0x6e6b06e7L , 0xfed41b76L ,
47- 0x89d32be0L , 0x10da7a5aL , 0x67dd4accL , 0xf9b9df6fL , 0x8ebeeff9L , 0x17b7be43L ,
48- 0x60b08ed5L , 0xd6d6a3e8L , 0xa1d1937eL , 0x38d8c2c4L , 0x4fdff252L , 0xd1bb67f1L ,
49- 0xa6bc5767L , 0x3fb506ddL , 0x48b2364bL , 0xd80d2bdaL , 0xaf0a1b4cL , 0x36034af6L ,
50- 0x41047a60L , 0xdf60efc3L , 0xa867df55L , 0x316e8eefL , 0x4669be79L , 0xcb61b38cL ,
51- 0xbc66831aL , 0x256fd2a0L , 0x5268e236L , 0xcc0c7795L , 0xbb0b4703L , 0x220216b9L ,
52- 0x5505262fL , 0xc5ba3bbeL , 0xb2bd0b28L , 0x2bb45a92L , 0x5cb36a04L , 0xc2d7ffa7L ,
53- 0xb5d0cf31L , 0x2cd99e8bL , 0x5bdeae1dL , 0x9b64c2b0L , 0xec63f226L , 0x756aa39cL ,
54- 0x26d930aL , 0x9c0906a9L , 0xeb0e363fL , 0x72076785L , 0x5005713L , 0x95bf4a82L ,
55- 0xe2b87a14L , 0x7bb12baeL , 0xcb61b38L , 0x92d28e9bL , 0xe5d5be0dL , 0x7cdcefb7L ,
56- 0xbdbdf21L , 0x86d3d2d4L , 0xf1d4e242L , 0x68ddb3f8L , 0x1fda836eL , 0x81be16cdL ,
57- 0xf6b9265bL , 0x6fb077e1L , 0x18b74777L , 0x88085ae6L , 0xff0f6a70L , 0x66063bcaL ,
58- 0x11010b5cL , 0x8f659effL , 0xf862ae69L , 0x616bffd3L , 0x166ccf45L , 0xa00ae278L ,
59- 0xd70dd2eeL , 0x4e048354L , 0x3903b3c2L , 0xa7672661L , 0xd06016f7L , 0x4969474dL ,
60- 0x3e6e77dbL , 0xaed16a4aL , 0xd9d65adcL , 0x40df0b66L , 0x37d83bf0L , 0xa9bcae53L ,
61- 0xdebb9ec5L , 0x47b2cf7fL , 0x30b5ffe9L , 0xbdbdf21cL , 0xcabac28aL , 0x53b39330L ,
62- 0x24b4a3a6L , 0xbad03605L , 0xcdd70693L , 0x54de5729L , 0x23d967bfL , 0xb3667a2eL ,
63- 0xc4614ab8L , 0x5d681b02L , 0x2a6f2b94L , 0xb40bbe37L , 0xc30c8ea1L , 0x5a05df1bL ,
64- 0x2d02ef8dL };
65-
6620consteval uint32_t crc32 (char const * str, int length)
6721{
22+ // CRC32 Table (zlib polynomial) static
23+ constexpr uint32_t crc_table[256 ] = {0x0L , 0x77073096L , 0xee0e612cL ,
24+ 0x990951baL , 0x76dc419L , 0x706af48fL , 0xe963a535L , 0x9e6495a3L , 0xedb8832L ,
25+ 0x79dcb8a4L , 0xe0d5e91eL , 0x97d2d988L , 0x9b64c2bL , 0x7eb17cbdL , 0xe7b82d07L ,
26+ 0x90bf1d91L , 0x1db71064L , 0x6ab020f2L , 0xf3b97148L , 0x84be41deL , 0x1adad47dL ,
27+ 0x6ddde4ebL , 0xf4d4b551L , 0x83d385c7L , 0x136c9856L , 0x646ba8c0L , 0xfd62f97aL ,
28+ 0x8a65c9ecL , 0x14015c4fL , 0x63066cd9L , 0xfa0f3d63L , 0x8d080df5L , 0x3b6e20c8L ,
29+ 0x4c69105eL , 0xd56041e4L , 0xa2677172L , 0x3c03e4d1L , 0x4b04d447L , 0xd20d85fdL ,
30+ 0xa50ab56bL , 0x35b5a8faL , 0x42b2986cL , 0xdbbbc9d6L , 0xacbcf940L , 0x32d86ce3L ,
31+ 0x45df5c75L , 0xdcd60dcfL , 0xabd13d59L , 0x26d930acL , 0x51de003aL , 0xc8d75180L ,
32+ 0xbfd06116L , 0x21b4f4b5L , 0x56b3c423L , 0xcfba9599L , 0xb8bda50fL , 0x2802b89eL ,
33+ 0x5f058808L , 0xc60cd9b2L , 0xb10be924L , 0x2f6f7c87L , 0x58684c11L , 0xc1611dabL ,
34+ 0xb6662d3dL , 0x76dc4190L , 0x1db7106L , 0x98d220bcL , 0xefd5102aL , 0x71b18589L ,
35+ 0x6b6b51fL , 0x9fbfe4a5L , 0xe8b8d433L , 0x7807c9a2L , 0xf00f934L , 0x9609a88eL ,
36+ 0xe10e9818L , 0x7f6a0dbbL , 0x86d3d2dL , 0x91646c97L , 0xe6635c01L , 0x6b6b51f4L ,
37+ 0x1c6c6162L , 0x856530d8L , 0xf262004eL , 0x6c0695edL , 0x1b01a57bL , 0x8208f4c1L ,
38+ 0xf50fc457L , 0x65b0d9c6L , 0x12b7e950L , 0x8bbeb8eaL , 0xfcb9887cL , 0x62dd1ddfL ,
39+ 0x15da2d49L , 0x8cd37cf3L , 0xfbd44c65L , 0x4db26158L , 0x3ab551ceL , 0xa3bc0074L ,
40+ 0xd4bb30e2L , 0x4adfa541L , 0x3dd895d7L , 0xa4d1c46dL , 0xd3d6f4fbL , 0x4369e96aL ,
41+ 0x346ed9fcL , 0xad678846L , 0xda60b8d0L , 0x44042d73L , 0x33031de5L , 0xaa0a4c5fL ,
42+ 0xdd0d7cc9L , 0x5005713cL , 0x270241aaL , 0xbe0b1010L , 0xc90c2086L , 0x5768b525L ,
43+ 0x206f85b3L , 0xb966d409L , 0xce61e49fL , 0x5edef90eL , 0x29d9c998L , 0xb0d09822L ,
44+ 0xc7d7a8b4L , 0x59b33d17L , 0x2eb40d81L , 0xb7bd5c3bL , 0xc0ba6cadL , 0xedb88320L ,
45+ 0x9abfb3b6L , 0x3b6e20cL , 0x74b1d29aL , 0xead54739L , 0x9dd277afL , 0x4db2615L ,
46+ 0x73dc1683L , 0xe3630b12L , 0x94643b84L , 0xd6d6a3eL , 0x7a6a5aa8L , 0xe40ecf0bL ,
47+ 0x9309ff9dL , 0xa00ae27L , 0x7d079eb1L , 0xf00f9344L , 0x8708a3d2L , 0x1e01f268L ,
48+ 0x6906c2feL , 0xf762575dL , 0x806567cbL , 0x196c3671L , 0x6e6b06e7L , 0xfed41b76L ,
49+ 0x89d32be0L , 0x10da7a5aL , 0x67dd4accL , 0xf9b9df6fL , 0x8ebeeff9L , 0x17b7be43L ,
50+ 0x60b08ed5L , 0xd6d6a3e8L , 0xa1d1937eL , 0x38d8c2c4L , 0x4fdff252L , 0xd1bb67f1L ,
51+ 0xa6bc5767L , 0x3fb506ddL , 0x48b2364bL , 0xd80d2bdaL , 0xaf0a1b4cL , 0x36034af6L ,
52+ 0x41047a60L , 0xdf60efc3L , 0xa867df55L , 0x316e8eefL , 0x4669be79L , 0xcb61b38cL ,
53+ 0xbc66831aL , 0x256fd2a0L , 0x5268e236L , 0xcc0c7795L , 0xbb0b4703L , 0x220216b9L ,
54+ 0x5505262fL , 0xc5ba3bbeL , 0xb2bd0b28L , 0x2bb45a92L , 0x5cb36a04L , 0xc2d7ffa7L ,
55+ 0xb5d0cf31L , 0x2cd99e8bL , 0x5bdeae1dL , 0x9b64c2b0L , 0xec63f226L , 0x756aa39cL ,
56+ 0x26d930aL , 0x9c0906a9L , 0xeb0e363fL , 0x72076785L , 0x5005713L , 0x95bf4a82L ,
57+ 0xe2b87a14L , 0x7bb12baeL , 0xcb61b38L , 0x92d28e9bL , 0xe5d5be0dL , 0x7cdcefb7L ,
58+ 0xbdbdf21L , 0x86d3d2d4L , 0xf1d4e242L , 0x68ddb3f8L , 0x1fda836eL , 0x81be16cdL ,
59+ 0xf6b9265bL , 0x6fb077e1L , 0x18b74777L , 0x88085ae6L , 0xff0f6a70L , 0x66063bcaL ,
60+ 0x11010b5cL , 0x8f659effL , 0xf862ae69L , 0x616bffd3L , 0x166ccf45L , 0xa00ae278L ,
61+ 0xd70dd2eeL , 0x4e048354L , 0x3903b3c2L , 0xa7672661L , 0xd06016f7L , 0x4969474dL ,
62+ 0x3e6e77dbL , 0xaed16a4aL , 0xd9d65adcL , 0x40df0b66L , 0x37d83bf0L , 0xa9bcae53L ,
63+ 0xdebb9ec5L , 0x47b2cf7fL , 0x30b5ffe9L , 0xbdbdf21cL , 0xcabac28aL , 0x53b39330L ,
64+ 0x24b4a3a6L , 0xbad03605L , 0xcdd70693L , 0x54de5729L , 0x23d967bfL , 0xb3667a2eL ,
65+ 0xc4614ab8L , 0x5d681b02L , 0x2a6f2b94L , 0xb40bbe37L , 0xc30c8ea1L , 0x5a05df1bL ,
66+ 0x2d02ef8dL };
6867 uint32_t crc = 0xFFFFFFFF ;
6968 for (auto j = 0 ; j <= length; ++j) {
7069 crc = (crc >> 8 ) ^ crc_table[(crc ^ static_cast <unsigned int >(str[j])) & 0x000000FF ];
@@ -82,16 +81,9 @@ consteval uint32_t operator""_h(const char* str, size_t)
8281 return compile_time_hash (str);
8382}
8483
85- constexpr uint32_t runtime_crc32 (char const * str, int length)
86- {
87- uint32_t crc = 0xFFFFFFFF ;
88- for (auto j = 0 ; j <= length; ++j) {
89- crc = (crc >> 8 ) ^ crc_table[(crc ^ static_cast <unsigned int >(str[j])) & 0x000000FF ];
90- }
91- return crc;
92- }
84+ uint32_t runtime_crc32 (char const * str, int length);
9385
94- constexpr uint32_t runtime_hash (char const * str)
86+ inline uint32_t runtime_hash (char const * str)
9587{
9688 return runtime_crc32 (str, static_cast <int >(__builtin_strlen (str)) - 1 ) ^ 0xFFFFFFFF ;
9789}
0 commit comments