QuasarAppLib
1.0.530.c9fba11
Toggle main menu visibility
crc32constexper.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2025-2026 QuasarApp.
3
* Distributed under the lgplv3 software license, see the accompanying
4
* Everyone is permitted to copy and distribute verbatim copies
5
* of this license document, but changing it is not allowed.
6
*/
7
8
#ifndef CRC32CONSTEXPER_H
9
#define CRC32CONSTEXPER_H
10
11
12
#include <array>
13
#include <cstddef>
14
#include <cstdint>
15
16
namespace
QuasarAppUtils
{
17
24
constexpr
std::array<uint32_t, 256>
generateCrc32Table
(uint32_t polynomial = 0xEDB88320) {
25
std::array<uint32_t, 256> table{};
26
for
(uint32_t i = 0; i < 256; ++i) {
27
uint32_t crc = i;
28
for
(
int
j = 0; j < 8; ++j) {
29
crc = (crc >> 1) ^ (-(crc & 1) & polynomial);
30
}
31
table[i] = crc;
32
}
33
return
table;
34
}
35
40
constexpr
std::array<uint32_t, 256>
crc32Table
=
generateCrc32Table
();
41
50
constexpr
uint32_t
calculateCrc32
(
const
char
* data,
size_t
size, uint32_t initialCrc = 0xFFFFFFFF) {
51
uint32_t crc = initialCrc;
52
for
(
size_t
i = 0; i < size; ++i) {
53
crc =
crc32Table
[(crc ^ data[i]) & 0xFF] ^ (crc >> 8);
54
}
55
return
crc ^ 0xFFFFFFFF;
56
}
57
66
constexpr
uint16_t
calculateCrc16
(
const
char
* data,
size_t
size, uint32_t initialCrc = 0xFFFFFFFF) {
67
return
calculateCrc32
(data, size, initialCrc) % 0xFFFF;
68
}
69
78
constexpr
uint16_t
calculateCrc8
(
const
char
* data,
size_t
size, uint32_t initialCrc = 0xFFFFFFFF) {
79
return
calculateCrc32
(data, size, initialCrc) % 0xFF;
80
}
81
87
#define LITIRAL_CRC32(str) \
88
(QuasarAppUtils::calculateCrc32(str, sizeof(str) - 1))
89
}
90
91
#endif
// CRC32CONSTEXPER_H
QuasarAppUtils
The QuasarAppUtils namespace contains the base functions for all applications of the QuasarApp group....
Definition
crc32constexper.h:16
QuasarAppUtils::generateCrc32Table
constexpr std::array< uint32_t, 256 > generateCrc32Table(uint32_t polynomial=0xEDB88320)
generateCrc32Table This method generate crc32 table for fast calculate crc32 hash.
Definition
crc32constexper.h:24
QuasarAppUtils::calculateCrc32
constexpr uint32_t calculateCrc32(const char *data, size_t size, uint32_t initialCrc=0xFFFFFFFF)
calculateCrc32 This method calculate crc32 hash for data.
Definition
crc32constexper.h:50
QuasarAppUtils::calculateCrc8
constexpr uint16_t calculateCrc8(const char *data, size_t size, uint32_t initialCrc=0xFFFFFFFF)
calculateCrc8 This method calculate crc8 hash for data.
Definition
crc32constexper.h:78
QuasarAppUtils::calculateCrc16
constexpr uint16_t calculateCrc16(const char *data, size_t size, uint32_t initialCrc=0xFFFFFFFF)
calculateCrc16 This method calculate crc16 hash for data.
Definition
crc32constexper.h:66
QuasarAppUtils::crc32Table
constexpr std::array< uint32_t, 256 > crc32Table
crc32Table This is crc32 table for fast calculate crc32 hash.
Definition
crc32constexper.h:40
crc32constexper.h
Generated by
1.18.0