31 #include <type_traits>
45 constexpr
static inline T Pi = T(3.14159265358979323846264338327950288419716939937510);
54 constexpr
static inline T e = T(2.71828182845904523536028747135266249775724709369995);
66 constexpr T
clamp(T value, T min, T max) {
67 return std::min(std::max(value, min), max);
78 return (deg / 360.0) * 2 * Pi<T>;
89 return (rad / (2 * Pi<T>)) * 360.0;
103 return operator""_kB(n) *
u64(1024);
110 return operator""_MB(n) *
u64(1024);
122 template<u16 Polynomial = 0x8005>
125 constexpr
auto Table = [] {
126 std::array<u16, 256> table;
128 for (
u16 i = 0; i < 256; i++) {
132 for (
u16 j = 0; j < 8; j++) {
133 if (((crc ^ c) & 0x0001U) != 0)
134 crc = (crc >> 1U) ^ Polynomial;
148 u16 crc = initialValue;
149 for (
u8 byte : data) {
150 crc = (crc >> 8) ^ Table[(crc ^
u16(
byte)) & 0x00FF];
164 template<u32 Polynomial = 0x04C11DB7>
167 constexpr
auto Table = [] {
168 std::array<u32, 256> table = {0};
170 for (
u32 i = 0; i < 256; i++) {
172 for (
size_t j = 0; j < 8; j++) {
174 c = Polynomial ^ (c >> 1);
185 u32 crc = initialValue;
186 for (
u8 byte : data) {
187 crc = Table[(crc ^ byte) & 0xFF] ^ (crc >> 8);
200 return (bcd & 0x0F) + 10 * ((bcd >> 4) & 0x0F);
210 return (bin % 10) | ((bin / 10) << 4);