xref: /aosp_15_r20/external/lzma/CPP/7zip/Compress/BZip2Crc.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // BZip2Crc.cpp
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker 
5*f6dc9357SAndroid Build Coastguard Worker #include "BZip2Crc.h"
6*f6dc9357SAndroid Build Coastguard Worker 
7*f6dc9357SAndroid Build Coastguard Worker MY_ALIGN(64)
8*f6dc9357SAndroid Build Coastguard Worker UInt32 CBZip2Crc::Table[256];
9*f6dc9357SAndroid Build Coastguard Worker 
10*f6dc9357SAndroid Build Coastguard Worker static const UInt32 kBZip2CrcPoly = 0x04c11db7;  /* AUTODIN II, Ethernet, & FDDI */
11*f6dc9357SAndroid Build Coastguard Worker 
InitTable()12*f6dc9357SAndroid Build Coastguard Worker void CBZip2Crc::InitTable()
13*f6dc9357SAndroid Build Coastguard Worker {
14*f6dc9357SAndroid Build Coastguard Worker   for (UInt32 i = 0; i < 256; i++)
15*f6dc9357SAndroid Build Coastguard Worker   {
16*f6dc9357SAndroid Build Coastguard Worker     UInt32 r = i << 24;
17*f6dc9357SAndroid Build Coastguard Worker     for (unsigned j = 0; j < 8; j++)
18*f6dc9357SAndroid Build Coastguard Worker       r = (r << 1) ^ (kBZip2CrcPoly & ((UInt32)0 - (r >> 31)));
19*f6dc9357SAndroid Build Coastguard Worker     Table[i] = r;
20*f6dc9357SAndroid Build Coastguard Worker   }
21*f6dc9357SAndroid Build Coastguard Worker }
22*f6dc9357SAndroid Build Coastguard Worker 
23*f6dc9357SAndroid Build Coastguard Worker static
24*f6dc9357SAndroid Build Coastguard Worker class CBZip2CrcTableInit
25*f6dc9357SAndroid Build Coastguard Worker {
26*f6dc9357SAndroid Build Coastguard Worker public:
CBZip2CrcTableInit()27*f6dc9357SAndroid Build Coastguard Worker   CBZip2CrcTableInit() { CBZip2Crc::InitTable(); }
28*f6dc9357SAndroid Build Coastguard Worker } g_BZip2CrcTableInit;
29