// Common/CRC.h

#ifndef __COMMON_CRC_H
#define __COMMON_CRC_H

#include <stddef.h>
#include "Types.h"

class CCRC
{
  UInt32 _value;
public:
	static UInt32 Table[256];
	static void InitTable();

  CCRC():  _value(0xFFFFFFFF){};
  void Init() { _value = 0xFFFFFFFF; }
  void UpdateByte(Byte v);
  void UpdateUInt16(UInt16 v);
  void UpdateUInt32(UInt32 v);
  void UpdateUInt64(UInt64 v);
  void Update(const void *data, size_t size);
  UInt32 GetDigest() const { return _value ^ 0xFFFFFFFF; }
  static UInt32 CalculateDigest(const void *data, size_t size)
  {
    CCRC crc;
    crc.Update(data, size);
    return crc.GetDigest();
  }
  static bool VerifyDigest(UInt32 digest, const void *data, size_t size)
  {
    return (CalculateDigest(data, size) == digest);
  }
};

#endif
