Added crc32builder
This commit is contained in:
@ -1,5 +1,6 @@
|
||||
set(headers
|
||||
src/cleanuphelper.h
|
||||
src/crc32builder.h
|
||||
src/cppflags.h
|
||||
src/cppmacros.h
|
||||
src/cppoverloadutils.h
|
||||
|
38
src/crc32builder.h
Normal file
38
src/crc32builder.h
Normal file
@ -0,0 +1,38 @@
|
||||
#pragma once
|
||||
|
||||
namespace cpputils {
|
||||
|
||||
class Crc32Builder
|
||||
{
|
||||
public:
|
||||
std::size_t write(uint8_t c)
|
||||
{
|
||||
return write(&c, 1);
|
||||
}
|
||||
|
||||
std::size_t write(const uint8_t *buf, std::size_t len)
|
||||
{
|
||||
auto lenTemp = len;
|
||||
while (lenTemp--)
|
||||
{
|
||||
uint32_t val = (crc ^ * buf++) & 0xFF;
|
||||
for (uint8_t i = 0; i < 8; i++)
|
||||
{
|
||||
val = val & 1 ? (val>>1)^0xEDB88320 : val>>1;
|
||||
}
|
||||
crc = val^crc>>8;
|
||||
}
|
||||
|
||||
return len;
|
||||
};
|
||||
|
||||
uint32_t hash() const
|
||||
{
|
||||
return crc ^ 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
private:
|
||||
uint32_t crc{0xFFFFFFFF};
|
||||
};
|
||||
|
||||
} // namespace cpputils
|
Reference in New Issue
Block a user