mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-26 19:50:45 +00:00
40 lines
670 B
C
40 lines
670 B
C
|
#ifndef __crc32_h__
|
||
|
#define __crc32_h__
|
||
|
|
||
|
#include "compat.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
extern uint32_t crc32table[256];
|
||
|
|
||
|
void initcrc32table(void);
|
||
|
|
||
|
uint32_t crc32once(uint8_t *blk, uint32_t len);
|
||
|
|
||
|
static inline void crc32init(uint32_t *crcvar)
|
||
|
{
|
||
|
if (!crcvar) return;
|
||
|
*crcvar = 0xffffffffl;
|
||
|
}
|
||
|
|
||
|
static inline void crc32block(uint32_t *crcvar, uint8_t *blk, uint32_t len)
|
||
|
{
|
||
|
uint32_t crc = *crcvar;
|
||
|
while (len--) crc = crc32table[(crc ^ *(blk++)) & 0xffl] ^(crc >> 8);
|
||
|
*crcvar = crc;
|
||
|
}
|
||
|
|
||
|
static inline uint32_t crc32finish(uint32_t *crcvar)
|
||
|
{
|
||
|
*crcvar = *crcvar ^ 0xffffffffl;
|
||
|
return *crcvar;
|
||
|
}
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif
|