1 // BZip2Crc.h 2 3 #ifndef __BZIP2_CRC_H 4 #define __BZIP2_CRC_H 5 6 #include "Common/Types.h" 7 8 class CBZip2Crc 9 { 10 UInt32 _value; 11 static UInt32 Table[256]; 12 public: 13 static void InitTable(); CBZip2Crc()14 CBZip2Crc(): _value(0xFFFFFFFF) {}; Init()15 void Init() { _value = 0xFFFFFFFF; } UpdateByte(Byte b)16 void UpdateByte(Byte b) { _value = Table[(_value >> 24) ^ b] ^ (_value << 8); } UpdateByte(unsigned int b)17 void UpdateByte(unsigned int b) { _value = Table[(_value >> 24) ^ b] ^ (_value << 8); } GetDigest()18 UInt32 GetDigest() const { return _value ^ 0xFFFFFFFF; } 19 }; 20 21 class CBZip2CombinedCrc 22 { 23 UInt32 _value; 24 public: CBZip2CombinedCrc()25 CBZip2CombinedCrc(): _value(0){}; Init()26 void Init() { _value = 0; } Update(UInt32 v)27 void Update(UInt32 v) { _value = ((_value << 1) | (_value >> 31)) ^ v; } GetDigest()28 UInt32 GetDigest() const { return _value ; } 29 }; 30 31 #endif 32