xref: /aosp_15_r20/external/lzma/CPP/7zip/Compress/BZip2Crc.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // BZip2Crc.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_BZIP2_CRC_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_BZIP2_CRC_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/MyTypes.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker class CBZip2Crc
9*f6dc9357SAndroid Build Coastguard Worker {
10*f6dc9357SAndroid Build Coastguard Worker   UInt32 _value;
11*f6dc9357SAndroid Build Coastguard Worker   static UInt32 Table[256];
12*f6dc9357SAndroid Build Coastguard Worker public:
13*f6dc9357SAndroid Build Coastguard Worker   static void InitTable();
_value(initVal)14*f6dc9357SAndroid Build Coastguard Worker   CBZip2Crc(UInt32 initVal = 0xFFFFFFFF): _value(initVal) {}
15*f6dc9357SAndroid Build Coastguard Worker   void Init(UInt32 initVal = 0xFFFFFFFF) { _value = initVal; }
UpdateByte(Byte b)16*f6dc9357SAndroid Build Coastguard Worker   void UpdateByte(Byte b) { _value = Table[(_value >> 24) ^ b] ^ (_value << 8); }
UpdateByte(unsigned b)17*f6dc9357SAndroid Build Coastguard Worker   void UpdateByte(unsigned b) { _value = Table[(_value >> 24) ^ b] ^ (_value << 8); }
GetDigest()18*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetDigest() const { return _value ^ 0xFFFFFFFF; }
19*f6dc9357SAndroid Build Coastguard Worker };
20*f6dc9357SAndroid Build Coastguard Worker 
21*f6dc9357SAndroid Build Coastguard Worker class CBZip2CombinedCrc
22*f6dc9357SAndroid Build Coastguard Worker {
23*f6dc9357SAndroid Build Coastguard Worker   UInt32 _value;
24*f6dc9357SAndroid Build Coastguard Worker public:
CBZip2CombinedCrc()25*f6dc9357SAndroid Build Coastguard Worker   CBZip2CombinedCrc(): _value(0) {}
Init()26*f6dc9357SAndroid Build Coastguard Worker   void Init() { _value = 0; }
Update(UInt32 v)27*f6dc9357SAndroid Build Coastguard Worker   void Update(UInt32 v) { _value = ((_value << 1) | (_value >> 31)) ^ v; }
GetDigest()28*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetDigest() const { return _value ; }
29*f6dc9357SAndroid Build Coastguard Worker };
30*f6dc9357SAndroid Build Coastguard Worker 
31*f6dc9357SAndroid Build Coastguard Worker #endif
32