Annotation of elwix/tools/oldlzma/SRC/Common/CRC.cpp, revision 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>