7 static const UInt32 kCRCPoly = 0xEDB88320;
\r
9 UInt32 CCRC::Table[256];
\r
11 void CCRC::InitTable()
\r
13 for (UInt32 i = 0; i < 256; i++)
\r
16 for (int j = 0; j < 8; j++)
\r
18 r = (r >> 1) ^ kCRCPoly;
\r
28 CCRCTableInit() { CCRC::InitTable(); }
\r
31 void CCRC::UpdateByte(Byte b)
\r
33 _value = Table[((Byte)(_value)) ^ b] ^ (_value >> 8);
\r
36 void CCRC::UpdateUInt16(UInt16 v)
\r
38 UpdateByte(Byte(v));
\r
39 UpdateByte(Byte(v >> 8));
\r
42 void CCRC::UpdateUInt32(UInt32 v)
\r
44 for (int i = 0; i < 4; i++)
\r
45 UpdateByte((Byte)(v >> (8 * i)));
\r
48 void CCRC::UpdateUInt64(UInt64 v)
\r
50 for (int i = 0; i < 8; i++)
\r
51 UpdateByte((Byte)(v >> (8 * i)));
\r
54 void CCRC::Update(const void *data, size_t size)
\r
57 const Byte *p = (const Byte *)data;
\r
58 for (; size > 0 ; size--, p++)
\r
59 v = Table[((Byte)(v)) ^ *p] ^ (v >> 8);
\r