/* XzCrc64.c -- CRC64 calculation | |
2010-04-16 : Igor Pavlov : Public domain */ | |
#include "XzCrc64.h" | |
#define kCrc64Poly UINT64_CONST(0xC96C5795D7870F42) | |
UInt64 g_Crc64Table[256]; | |
void MY_FAST_CALL Crc64GenerateTable(void) | |
{ | |
UInt32 i; | |
for (i = 0; i < 256; i++) | |
{ | |
UInt64 r = i; | |
int j; | |
for (j = 0; j < 8; j++) | |
r = (r >> 1) ^ ((UInt64)kCrc64Poly & ~((r & 1) - 1)); | |
g_Crc64Table[i] = r; | |
} | |
} | |
UInt64 MY_FAST_CALL Crc64Update(UInt64 v, const void *data, size_t size) | |
{ | |
const Byte *p = (const Byte *)data; | |
for (; size > 0 ; size--, p++) | |
v = CRC64_UPDATE_BYTE(v, *p); | |
return v; | |
} | |
UInt64 MY_FAST_CALL Crc64Calc(const void *data, size_t size) | |
{ | |
return CRC64_GET_DIGEST(Crc64Update(CRC64_INIT_VAL, data, size)); | |
} |