Added crc32builder
This commit is contained in:
@ -1,5 +1,6 @@
|
|||||||
set(headers
|
set(headers
|
||||||
src/cleanuphelper.h
|
src/cleanuphelper.h
|
||||||
|
src/crc32builder.h
|
||||||
src/cppflags.h
|
src/cppflags.h
|
||||||
src/cppmacros.h
|
src/cppmacros.h
|
||||||
src/cppoverloadutils.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