Upload 2.0.2
[physicsfs] / lzma / C / 7zCrcT8.c
1 /* 7zCrcT8.c */
2
3 #include "7zCrc.h"
4
5 #define kCrcPoly 0xEDB88320
6 #define CRC_NUM_TABLES 8
7
8 UInt32 g_CrcTable[256 * CRC_NUM_TABLES];
9
10 void MY_FAST_CALL CrcGenerateTable()
11 {
12   UInt32 i;
13   for (i = 0; i < 256; i++)
14   {
15     UInt32 r = i;
16     int j;
17     for (j = 0; j < 8; j++)
18       r = (r >> 1) ^ (kCrcPoly & ~((r & 1) - 1));
19     g_CrcTable[i] = r;
20   }
21   #if CRC_NUM_TABLES > 1
22   for (; i < 256 * CRC_NUM_TABLES; i++)
23   {
24     UInt32 r = g_CrcTable[i - 256];
25     g_CrcTable[i] = g_CrcTable[r & 0xFF] ^ (r >> 8);
26   }
27   #endif
28 }
29
30 UInt32 MY_FAST_CALL CrcUpdateT8(UInt32 v, const void *data, size_t size, const UInt32 *table);
31
32 UInt32 MY_FAST_CALL CrcUpdate(UInt32 v, const void *data, size_t size)
33 {
34   return CrcUpdateT8(v, data, size, g_CrcTable);
35 }
36
37 UInt32 MY_FAST_CALL CrcCalc(const void *data, size_t size)
38 {
39   return CrcUpdateT8(CRC_INIT_VAL, data, size, g_CrcTable) ^ 0xFFFFFFFF;
40 }