/arch/x86/iodev/crc32.cc
https://github.com/antmar/Skyeye-fixes · C++ · 52 lines · 36 code · 9 blank · 7 comment · 5 complexity · 8ba900a48a449469678c1d415053100f MD5 · raw file
- /////////////////////////////////////////////////////////////////////////
- // $Id: crc32.cc,v 1.5 2008/04/17 14:39:32 sshwarts Exp $
- /////////////////////////////////////////////////////////////////////////
- //
- /* CRC-32 calculator
- * Adapted from http://www.createwindow.org/programming/crc32/
- */
- #include "crc32.h"
- CRC_Generator::CRC_Generator() {
- init();
- }
- void CRC_Generator::init(void)
- {
- Bit32u POLYNOMIAL = 0x04c11db7;
- int i;
- for(i = 0; i<0xFF; i++) {
- int j;
- crc32_table[i]=reflect(i,8) << 24;
- for(j=0; j<8; j++)
- crc32_table[i] = (crc32_table[i]<<1)^(crc32_table[i] & (1<<31) ? POLYNOMIAL : 0);
- crc32_table[i] = reflect(crc32_table[i], 32);
- }
- }
- Bit32u CRC_Generator::reflect(Bit32u ref, Bit8u ch)
- {
- Bit32u value(0);
- int i;
- for(i=1; i<(ch+1); i++) {
- if(ref & 1)
- value |= 1 << (ch-i);
- ref >>= 1;
- }
- return value;
- }
- Bit32u CRC_Generator::get_CRC(Bit8u * buf, Bit32u buflen)
- {
- Bit32u ulCRC(0xFFFFFFFF);
- Bit32u len(buflen);
- Bit8u * buffer=(Bit8u *) buf;
- while(len--)
- ulCRC=(ulCRC>>8)^crc32_table[(ulCRC & 0xFF)^*buffer++];
- return ulCRC ^ 0xFFFFFFFF;
- }