From 1868d698f58329385a37062f4612e64e0c06c78f Mon Sep 17 00:00:00 2001 From: gymnast86 Date: Thu, 4 Jun 2026 18:05:08 -0700 Subject: [PATCH] include crc32.hpp --- .../randomizer/generator/utility/crc32.hpp | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/dusk/randomizer/generator/utility/crc32.hpp diff --git a/src/dusk/randomizer/generator/utility/crc32.hpp b/src/dusk/randomizer/generator/utility/crc32.hpp new file mode 100644 index 0000000000..a026fcab64 --- /dev/null +++ b/src/dusk/randomizer/generator/utility/crc32.hpp @@ -0,0 +1,34 @@ +#pragma once + +#include + +namespace randomizer::utility { + +// Generates standard lookup table +constexpr std::array generate_crc32_table() { + std::array table{}; + for (uint32_t i = 0; i < 256; ++i) { + uint32_t ch = i; + for (size_t j = 0; j < 8; ++j) { + ch = (ch & 1) ? (0xEDB88320 ^ (ch >> 1)) : (ch >> 1); + } + table[i] = ch; + } + return table; +} + +inline constexpr std::array crc32_table = generate_crc32_table(); + +inline uint32_t crc32(const void* data, size_t length, uint32_t previous_crc = 0) { + const auto* bytes = static_cast(data); + uint32_t crc = ~previous_crc; + + for (size_t i = 0; i < length; ++i) { + auto index = static_cast(crc ^ bytes[i]); + crc = (crc >> 8) ^ crc32_table[index]; + } + + return ~crc; +} + +} \ No newline at end of file