libdap
Updated for version 3.17.0
|
00001 /* 00002 * From Tom Distler 00003 * See http://tdistler.com/2011/06/22/crc32-a-simple-c-class 00004 */ 00005 00006 #ifndef CRC_H_ 00007 #define CRC_H_ 00008 00009 static const uint32_t kCrc32Table[256] = { 00010 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 00011 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 00012 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 00013 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 00014 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 00015 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 00016 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 00017 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 00018 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 00019 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 00020 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 00021 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 00022 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 00023 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 00024 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 00025 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 00026 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 00027 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 00028 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 00029 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 00030 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 00031 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 00032 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 00033 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 00034 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 00035 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 00036 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 00037 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 00038 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 00039 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 00040 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 00041 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 00042 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 00043 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 00044 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 00045 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 00046 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 00047 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 00048 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 00049 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 00050 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 00051 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 00052 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 00053 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 00054 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 00055 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 00056 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 00057 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 00058 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 00059 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 00060 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 00061 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 00062 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 00063 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 00064 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 00065 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 00066 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 00067 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 00068 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 00069 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 00070 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 00071 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 00072 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 00073 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, 00074 }; // kCrc32Table 00075 00076 class Crc32 00077 { 00078 public: 00079 typedef uint32_t checksum; 00080 00084 Crc32() { Reset(); } 00085 00086 ~Crc32() throw() {} 00087 00092 void Reset() { _crc = (uint32_t)~0; } 00093 00098 void AddData(const uint8_t* pData, const uint32_t length) 00099 { 00100 uint8_t* pCur = (uint8_t*)pData; 00101 uint32_t remaining = length; 00102 for (; remaining--; ++pCur) 00103 _crc = ( _crc >> 8 ) ^ kCrc32Table[(_crc ^ *pCur) & 0xff]; 00104 } 00105 00110 checksum GetCrc32() const { return ~_crc; } 00111 00112 private: 00113 uint32_t _crc; 00114 }; 00115 00116 #endif /* CRC_H_ */