Added crc32builder

This commit is contained in:
2021-02-15 20:14:10 +01:00
parent b8fe94f78b
commit 315e5d1dd2
2 changed files with 39 additions and 0 deletions

View File

@ -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
View 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