rlm@1: // BZip2Crc.h rlm@1: rlm@1: #ifndef __BZIP2_CRC_H rlm@1: #define __BZIP2_CRC_H rlm@1: rlm@1: #include "Common/Types.h" rlm@1: rlm@1: class CBZip2Crc rlm@1: { rlm@1: UInt32 _value; rlm@1: static UInt32 Table[256]; rlm@1: public: rlm@1: static void InitTable(); rlm@1: CBZip2Crc(): _value(0xFFFFFFFF) {}; rlm@1: void Init() { _value = 0xFFFFFFFF; } rlm@1: void UpdateByte(Byte b) { _value = Table[(_value >> 24) ^ b] ^ (_value << 8); } rlm@1: void UpdateByte(unsigned int b) { _value = Table[(_value >> 24) ^ b] ^ (_value << 8); } rlm@1: UInt32 GetDigest() const { return _value ^ 0xFFFFFFFF; } rlm@1: }; rlm@1: rlm@1: class CBZip2CombinedCrc rlm@1: { rlm@1: UInt32 _value; rlm@1: public: rlm@1: CBZip2CombinedCrc(): _value(0){}; rlm@1: void Init() { _value = 0; } rlm@1: void Update(UInt32 v) { _value = ((_value << 1) | (_value >> 31)) ^ v; } rlm@1: UInt32 GetDigest() const { return _value ; } rlm@1: }; rlm@1: rlm@1: #endif