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>