Annotation of elwix/tools/oldlzma/SRC/Common/CRC.cpp, revision 1.1.1.1
1.1 misho 1: // Common/CRC.cpp
2:
3: #include "StdAfx.h"
4:
5: #include "CRC.h"
6:
7: static const UInt32 kCRCPoly = 0xEDB88320;
8:
9: UInt32 CCRC::Table[256];
10:
11: void CCRC::InitTable()
12: {
13: for (UInt32 i = 0; i < 256; i++)
14: {
15: UInt32 r = i;
16: for (int j = 0; j < 8; j++)
17: if (r & 1)
18: r = (r >> 1) ^ kCRCPoly;
19: else
20: r >>= 1;
21: CCRC::Table[i] = r;
22: }
23: }
24:
25: class CCRCTableInit
26: {
27: public:
28: CCRCTableInit() { CCRC::InitTable(); }
29: } g_CRCTableInit;
30:
31: void CCRC::UpdateByte(Byte b)
32: {
33: _value = Table[((Byte)(_value)) ^ b] ^ (_value >> 8);
34: }
35:
36: void CCRC::UpdateUInt16(UInt16 v)
37: {
38: UpdateByte(Byte(v));
39: UpdateByte(Byte(v >> 8));
40: }
41:
42: void CCRC::UpdateUInt32(UInt32 v)
43: {
44: for (int i = 0; i < 4; i++)
45: UpdateByte((Byte)(v >> (8 * i)));
46: }
47:
48: void CCRC::UpdateUInt64(UInt64 v)
49: {
50: for (int i = 0; i < 8; i++)
51: UpdateByte((Byte)(v >> (8 * i)));
52: }
53:
54: void CCRC::Update(const void *data, UInt32 size)
55: {
56: UInt32 v = _value;
57: const Byte *p = (const Byte *)data;
58: for (; size > 0 ; size--, p++)
59: v = Table[((Byte)(v)) ^ *p] ^ (v >> 8);
60: _value = v;
61: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>