annotate src/win32/7zip/7z/CPP/7zip/Archive/Lzh/LzhCRC.cpp @ 1:f9f4f1b99eed

importing src directory
author Robert McIntyre <rlm@mit.edu>
date Sat, 03 Mar 2012 10:31:27 -0600
parents
children
rev   line source
rlm@1 1 // LzhCRC.cpp
rlm@1 2
rlm@1 3 #include "StdAfx.h"
rlm@1 4
rlm@1 5 #include "LzhCRC.h"
rlm@1 6
rlm@1 7 namespace NArchive {
rlm@1 8 namespace NLzh {
rlm@1 9
rlm@1 10 static const UInt16 kCRCPoly = 0xA001;
rlm@1 11
rlm@1 12 UInt16 CCRC::Table[256];
rlm@1 13
rlm@1 14 void CCRC::InitTable()
rlm@1 15 {
rlm@1 16 for (UInt32 i = 0; i < 256; i++)
rlm@1 17 {
rlm@1 18 UInt32 r = i;
rlm@1 19 for (int j = 0; j < 8; j++)
rlm@1 20 if (r & 1)
rlm@1 21 r = (r >> 1) ^ kCRCPoly;
rlm@1 22 else
rlm@1 23 r >>= 1;
rlm@1 24 CCRC::Table[i] = (UInt16)r;
rlm@1 25 }
rlm@1 26 }
rlm@1 27
rlm@1 28 class CCRCTableInit
rlm@1 29 {
rlm@1 30 public:
rlm@1 31 CCRCTableInit() { CCRC::InitTable(); }
rlm@1 32 } g_CRCTableInit;
rlm@1 33
rlm@1 34 void CCRC::Update(const void *data, size_t size)
rlm@1 35 {
rlm@1 36 UInt16 v = _value;
rlm@1 37 const Byte *p = (const Byte *)data;
rlm@1 38 for (; size > 0; size--, p++)
rlm@1 39 v = (UInt16)(Table[((Byte)(v)) ^ *p] ^ (v >> 8));
rlm@1 40 _value = v;
rlm@1 41 }
rlm@1 42
rlm@1 43 }}