michael@0: // Common/CRC.h michael@0: michael@0: #ifndef __COMMON_CRC_H michael@0: #define __COMMON_CRC_H michael@0: michael@0: #include michael@0: #include "Types.h" michael@0: michael@0: class CCRC michael@0: { michael@0: UInt32 _value; michael@0: public: michael@0: static UInt32 Table[256]; michael@0: static void InitTable(); michael@0: michael@0: CCRC(): _value(0xFFFFFFFF){}; michael@0: void Init() { _value = 0xFFFFFFFF; } michael@0: void UpdateByte(Byte v); michael@0: void UpdateUInt16(UInt16 v); michael@0: void UpdateUInt32(UInt32 v); michael@0: void UpdateUInt64(UInt64 v); michael@0: void Update(const void *data, size_t size); michael@0: UInt32 GetDigest() const { return _value ^ 0xFFFFFFFF; } michael@0: static UInt32 CalculateDigest(const void *data, size_t size) michael@0: { michael@0: CCRC crc; michael@0: crc.Update(data, size); michael@0: return crc.GetDigest(); michael@0: } michael@0: static bool VerifyDigest(UInt32 digest, const void *data, size_t size) michael@0: { michael@0: return (CalculateDigest(data, size) == digest); michael@0: } michael@0: }; michael@0: michael@0: #endif