Aeon Engine c550894
AeonGames Open Source Game Engine
Loading...
Searching...
No Matches
CRC.hpp
1/*
2Copyright (C) 2016,2018,2019,2025,2026 Rodrigo Jose Hernandez Cordoba
3
4Licensed under the Apache License, Version 2.0 (the "License");
5you may not use this file except in compliance with the License.
6You may obtain a copy of the License at
7
8http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15*/
16
17#ifndef AEONGAMES_CRC_H
18#define AEONGAMES_CRC_H
22#ifdef __cplusplus
23#include <cstddef>
24#include <cstdint>
25#else
26#include <stddef.h>
27#include <stdint.h>
28#endif
29namespace AeonGames
30{
31#ifdef __cplusplus
32 extern "C"
33 {
34#endif
36 DLL uint32_t crc32i ( const char* message, size_t size, uint32_t previous_crc = 0 );
37#ifdef __cplusplus
38}
39#endif
40
42#ifdef __cplusplus
43constexpr
44#else
45const
46#endif
47uint32_t crc_table32[256] =
48{
49 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9,
50 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,
51 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,
52 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
53 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9,
54 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,
55 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,
56 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd,
57 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
58 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5,
59 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81,
60 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,
61 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49,
62 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
63 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1,
64 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d,
65 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae,
66 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,
67 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
68 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca,
69 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,
70 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02,
71 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066,
72 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
73 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e,
74 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692,
75 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6,
76 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,
77 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
78 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,
79 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686,
80 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a,
81 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637,
82 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
83 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,
84 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,
85 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47,
86 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b,
87 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
88 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623,
89 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7,
90 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,
91 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f,
92 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
93 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7,
94 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b,
95 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f,
96 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,
97 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
98 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c,
99 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8,
100 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24,
101 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30,
102 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
103 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088,
104 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,
105 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0,
106 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c,
107 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
108 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,
109 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0,
110 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c,
111 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,
112 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
113};
114
115#ifdef __cplusplus
116
119template <uint32_t bits>
120struct mask_high32
121{
122 enum { value = 0x0 };
123};
124
127template <uint32_t bits>
128struct mask_low32
129{
130 enum { value = 0x0 };
131};
132
133template <>
134struct mask_high32<1>
135{
136 enum { value = 0x55555555 };
137};
138
139template <>
140struct mask_low32<1>
141{
142 enum { value = 0xAAAAAAAA };
143};
144
145template <>
146struct mask_high32<2>
147{
148 enum { value = 0x33333333 };
149};
150
151template <>
152struct mask_low32<2>
153{
154 enum { value = 0xCCCCCCCC };
155};
156
157template <>
158struct mask_high32<4>
159{
160 enum { value = 0x0F0F0F0F };
161};
162
163template <>
164struct mask_low32<4>
165{
166 enum { value = 0xF0F0F0F0};
167};
168
169template <>
170struct mask_high32<8>
171{
172 enum { value = 0x00FF00FF };
173};
174
175template <>
176struct mask_low32<8>
177{
178 enum { value = 0xFF00FF00 };
179};
180
181template <>
182struct mask_high32<16>
183{
184 enum { value = 0x0000FFFF };
185};
186
187template <>
188struct mask_low32<16>
189{
190 enum { value = 0xFFFF0000 };
191};
192
197template <uint32_t bits>
198constexpr uint32_t reflect32 ( uint32_t x )
199{
200 return ( ( reflect32 < bits / 2 > ( x ) & mask_high32<bits>::value ) << bits |
201 ( reflect32 < bits / 2 > ( x ) & mask_low32<bits>::value ) >> bits );
202};
203
204template <>
205constexpr uint32_t reflect32<1> ( uint32_t x )
206{
207 return ( ( x & 0x55555555 ) << 1 | ( x & 0xAAAAAAAA ) >> 1 );
208};
209
215constexpr uint32_t crc32impl ( const char* message, const std::size_t size, uint32_t crc )
216{
217 return size == 0 ? reflect32<16> ( crc ) ^ 0xFFFFFFFF :
218 crc32impl ( message + 1, size - 1, crc_table32[reflect32<4> ( static_cast<uint8_t> ( message[0] ) ) ^ ( crc >> ( 32 - 8 ) )] ^ ( crc << 8 ) );
219}
220
222constexpr uint32_t crc32r ( const char* message, const std::size_t size )
223{
224 return crc32impl ( message, size, 0xFFFFFFFF );
225}
226
231constexpr uint32_t operator ""_crc32 ( const char* message, const std::size_t size )
232{
233 return crc32r ( message, size );
234}
235
237template< size_t N >
238constexpr uint32_t crc32r ( char const ( &message ) [N] )
239{
240 return crc32r ( message, N - 1 );
241}
242
243static_assert ( "AeonGames"_crc32 == 0x2B0C3B, "CRC32 Operator Failure." );
244static_assert ( crc32r ( "AeonGames", 9 ) == 0x2B0C3B, "CRC32 Failure." );
245static_assert ( crc32r ( "AeonGames" ) == 0x2B0C3B, "CRC32 Failure." );
246
247#ifdef __cplusplus
248extern "C"
249{
250#endif
252 DLL uint64_t crc64i ( const char* message, size_t size, uint64_t previous_crc = 0 );
253#ifdef __cplusplus
254}
255#endif
256
258#ifdef __cplusplus
259constexpr
260#else
261const
262#endif
263uint64_t crc_table64[256] =
264{
265 0x0000000000000000, 0x42F0E1EBA9EA3693, 0x85E1C3D753D46D26, 0xC711223CFA3E5BB5,
266 0x493366450E42ECDF, 0x0BC387AEA7A8DA4C, 0xCCD2A5925D9681F9, 0x8E224479F47CB76A,
267 0x9266CC8A1C85D9BE, 0xD0962D61B56FEF2D, 0x17870F5D4F51B498, 0x5577EEB6E6BB820B,
268 0xDB55AACF12C73561, 0x99A54B24BB2D03F2, 0x5EB4691841135847, 0x1C4488F3E8F96ED4,
269 0x663D78FF90E185EF, 0x24CD9914390BB37C, 0xE3DCBB28C335E8C9, 0xA12C5AC36ADFDE5A,
270 0x2F0E1EBA9EA36930, 0x6DFEFF5137495FA3, 0xAAEFDD6DCD770416, 0xE81F3C86649D3285,
271 0xF45BB4758C645C51, 0xB6AB559E258E6AC2, 0x71BA77A2DFB03177, 0x334A9649765A07E4,
272 0xBD68D2308226B08E, 0xFF9833DB2BCC861D, 0x388911E7D1F2DDA8, 0x7A79F00C7818EB3B,
273 0xCC7AF1FF21C30BDE, 0x8E8A101488293D4D, 0x499B3228721766F8, 0x0B6BD3C3DBFD506B,
274 0x854997BA2F81E701, 0xC7B97651866BD192, 0x00A8546D7C558A27, 0x4258B586D5BFBCB4,
275 0x5E1C3D753D46D260, 0x1CECDC9E94ACE4F3, 0xDBFDFEA26E92BF46, 0x990D1F49C77889D5,
276 0x172F5B3033043EBF, 0x55DFBADB9AEE082C, 0x92CE98E760D05399, 0xD03E790CC93A650A,
277 0xAA478900B1228E31, 0xE8B768EB18C8B8A2, 0x2FA64AD7E2F6E317, 0x6D56AB3C4B1CD584,
278 0xE374EF45BF6062EE, 0xA1840EAE168A547D, 0x66952C92ECB40FC8, 0x2465CD79455E395B,
279 0x3821458AADA7578F, 0x7AD1A461044D611C, 0xBDC0865DFE733AA9, 0xFF3067B657990C3A,
280 0x711223CFA3E5BB50, 0x33E2C2240A0F8DC3, 0xF4F3E018F031D676, 0xB60301F359DBE0E5,
281 0xDA050215EA6C212F, 0x98F5E3FE438617BC, 0x5FE4C1C2B9B84C09, 0x1D14202910527A9A,
282 0x93366450E42ECDF0, 0xD1C685BB4DC4FB63, 0x16D7A787B7FAA0D6, 0x5427466C1E109645,
283 0x4863CE9FF6E9F891, 0x0A932F745F03CE02, 0xCD820D48A53D95B7, 0x8F72ECA30CD7A324,
284 0x0150A8DAF8AB144E, 0x43A04931514122DD, 0x84B16B0DAB7F7968, 0xC6418AE602954FFB,
285 0xBC387AEA7A8DA4C0, 0xFEC89B01D3679253, 0x39D9B93D2959C9E6, 0x7B2958D680B3FF75,
286 0xF50B1CAF74CF481F, 0xB7FBFD44DD257E8C, 0x70EADF78271B2539, 0x321A3E938EF113AA,
287 0x2E5EB66066087D7E, 0x6CAE578BCFE24BED, 0xABBF75B735DC1058, 0xE94F945C9C3626CB,
288 0x676DD025684A91A1, 0x259D31CEC1A0A732, 0xE28C13F23B9EFC87, 0xA07CF2199274CA14,
289 0x167FF3EACBAF2AF1, 0x548F120162451C62, 0x939E303D987B47D7, 0xD16ED1D631917144,
290 0x5F4C95AFC5EDC62E, 0x1DBC74446C07F0BD, 0xDAAD56789639AB08, 0x985DB7933FD39D9B,
291 0x84193F60D72AF34F, 0xC6E9DE8B7EC0C5DC, 0x01F8FCB784FE9E69, 0x43081D5C2D14A8FA,
292 0xCD2A5925D9681F90, 0x8FDAB8CE70822903, 0x48CB9AF28ABC72B6, 0x0A3B7B1923564425,
293 0x70428B155B4EAF1E, 0x32B26AFEF2A4998D, 0xF5A348C2089AC238, 0xB753A929A170F4AB,
294 0x3971ED50550C43C1, 0x7B810CBBFCE67552, 0xBC902E8706D82EE7, 0xFE60CF6CAF321874,
295 0xE224479F47CB76A0, 0xA0D4A674EE214033, 0x67C58448141F1B86, 0x253565A3BDF52D15,
296 0xAB1721DA49899A7F, 0xE9E7C031E063ACEC, 0x2EF6E20D1A5DF759, 0x6C0603E6B3B7C1CA,
297 0xF6FAE5C07D3274CD, 0xB40A042BD4D8425E, 0x731B26172EE619EB, 0x31EBC7FC870C2F78,
298 0xBFC9838573709812, 0xFD39626EDA9AAE81, 0x3A28405220A4F534, 0x78D8A1B9894EC3A7,
299 0x649C294A61B7AD73, 0x266CC8A1C85D9BE0, 0xE17DEA9D3263C055, 0xA38D0B769B89F6C6,
300 0x2DAF4F0F6FF541AC, 0x6F5FAEE4C61F773F, 0xA84E8CD83C212C8A, 0xEABE6D3395CB1A19,
301 0x90C79D3FEDD3F122, 0xD2377CD44439C7B1, 0x15265EE8BE079C04, 0x57D6BF0317EDAA97,
302 0xD9F4FB7AE3911DFD, 0x9B041A914A7B2B6E, 0x5C1538ADB04570DB, 0x1EE5D94619AF4648,
303 0x02A151B5F156289C, 0x4051B05E58BC1E0F, 0x87409262A28245BA, 0xC5B073890B687329,
304 0x4B9237F0FF14C443, 0x0962D61B56FEF2D0, 0xCE73F427ACC0A965, 0x8C8315CC052A9FF6,
305 0x3A80143F5CF17F13, 0x7870F5D4F51B4980, 0xBF61D7E80F251235, 0xFD913603A6CF24A6,
306 0x73B3727A52B393CC, 0x31439391FB59A55F, 0xF652B1AD0167FEEA, 0xB4A25046A88DC879,
307 0xA8E6D8B54074A6AD, 0xEA16395EE99E903E, 0x2D071B6213A0CB8B, 0x6FF7FA89BA4AFD18,
308 0xE1D5BEF04E364A72, 0xA3255F1BE7DC7CE1, 0x64347D271DE22754, 0x26C49CCCB40811C7,
309 0x5CBD6CC0CC10FAFC, 0x1E4D8D2B65FACC6F, 0xD95CAF179FC497DA, 0x9BAC4EFC362EA149,
310 0x158E0A85C2521623, 0x577EEB6E6BB820B0, 0x906FC95291867B05, 0xD29F28B9386C4D96,
311 0xCEDBA04AD0952342, 0x8C2B41A1797F15D1, 0x4B3A639D83414E64, 0x09CA82762AAB78F7,
312 0x87E8C60FDED7CF9D, 0xC51827E4773DF90E, 0x020905D88D03A2BB, 0x40F9E43324E99428,
313 0x2CFFE7D5975E55E2, 0x6E0F063E3EB46371, 0xA91E2402C48A38C4, 0xEBEEC5E96D600E57,
314 0x65CC8190991CB93D, 0x273C607B30F68FAE, 0xE02D4247CAC8D41B, 0xA2DDA3AC6322E288,
315 0xBE992B5F8BDB8C5C, 0xFC69CAB42231BACF, 0x3B78E888D80FE17A, 0x7988096371E5D7E9,
316 0xF7AA4D1A85996083, 0xB55AACF12C735610, 0x724B8ECDD64D0DA5, 0x30BB6F267FA73B36,
317 0x4AC29F2A07BFD00D, 0x08327EC1AE55E69E, 0xCF235CFD546BBD2B, 0x8DD3BD16FD818BB8,
318 0x03F1F96F09FD3CD2, 0x41011884A0170A41, 0x86103AB85A2951F4, 0xC4E0DB53F3C36767,
319 0xD8A453A01B3A09B3, 0x9A54B24BB2D03F20, 0x5D45907748EE6495, 0x1FB5719CE1045206,
320 0x919735E51578E56C, 0xD367D40EBC92D3FF, 0x1476F63246AC884A, 0x568617D9EF46BED9,
321 0xE085162AB69D5E3C, 0xA275F7C11F7768AF, 0x6564D5FDE549331A, 0x279434164CA30589,
322 0xA9B6706FB8DFB2E3, 0xEB46918411358470, 0x2C57B3B8EB0BDFC5, 0x6EA7525342E1E956,
323 0x72E3DAA0AA188782, 0x30133B4B03F2B111, 0xF7021977F9CCEAA4, 0xB5F2F89C5026DC37,
324 0x3BD0BCE5A45A6B5D, 0x79205D0E0DB05DCE, 0xBE317F32F78E067B, 0xFCC19ED95E6430E8,
325 0x86B86ED5267CDBD3, 0xC4488F3E8F96ED40, 0x0359AD0275A8B6F5, 0x41A94CE9DC428066,
326 0xCF8B0890283E370C, 0x8D7BE97B81D4019F, 0x4A6ACB477BEA5A2A, 0x089A2AACD2006CB9,
327 0x14DEA25F3AF9026D, 0x562E43B4931334FE, 0x913F6188692D6F4B, 0xD3CF8063C0C759D8,
328 0x5DEDC41A34BBEEB2, 0x1F1D25F19D51D821, 0xD80C07CD676F8394, 0x9AFCE626CE85B507
329};
330
331#ifdef __cplusplus
332
335template <uint64_t bits>
336struct mask_high64
337{
338 enum : uint64_t { value = 0x0 };
339};
340
343template <uint64_t bits>
344struct mask_low64
345{
346 enum : uint64_t { value = 0x0 };
347};
348
349template <>
350struct mask_high64<1>
351{
352 enum : uint64_t { value = 0x5555555555555555 };
353};
354
355template <>
356struct mask_low64<1>
357{
358 enum : uint64_t { value = 0xAAAAAAAAAAAAAAAA };
359};
360
361template <>
362struct mask_high64<2>
363{
364 enum : uint64_t { value = 0x3333333333333333 };
365};
366
367template <>
368struct mask_low64<2>
369{
370 enum : uint64_t { value = 0xCCCCCCCCCCCCCCCC };
371};
372
373template <>
374struct mask_high64<4>
375{
376 enum : uint64_t { value = 0x0F0F0F0F0F0F0F0F };
377};
378
379template <>
380struct mask_low64<4>
381{
382 enum : uint64_t { value = 0xF0F0F0F0F0F0F0F0};
383};
384
385template <>
386struct mask_high64<8>
387{
388 enum : uint64_t { value = 0x00FF00FF00FF00FF };
389};
390
391template <>
392struct mask_low64<8>
393{
394 enum : uint64_t { value = 0xFF00FF00FF00FF00 };
395};
396
397template <>
398struct mask_high64<16>
399{
400 enum : uint64_t { value = 0x0000FFFF0000FFFF };
401};
402
403template <>
404struct mask_low64<16>
405{
406 enum : uint64_t { value = 0xFFFF0000FFFF0000 };
407};
408
409template <>
410struct mask_high64<32>
411{
412 enum : uint64_t { value = 0x00000000FFFFFFFF };
413};
414
415template <>
416struct mask_low64<32>
417{
418 enum : uint64_t { value = 0xFFFFFFFF00000000 };
419};
420
425template <uint64_t bits>
426constexpr uint64_t reflect64 ( uint64_t x )
427{
428 return ( ( reflect64 < bits / 2 > ( x ) & mask_high64<bits>::value ) << bits |
429 ( reflect64 < bits / 2 > ( x ) & mask_low64<bits>::value ) >> bits );
430};
431
432template <>
433constexpr uint64_t reflect64<1> ( uint64_t x )
434{
435 return ( ( x & 0x5555555555555555 ) << 1 | ( x & 0xAAAAAAAAAAAAAAAA ) >> 1 );
436};
437
443constexpr uint64_t crc64impl ( const char* message, const std::size_t size, uint64_t crc )
444{
445 return size == 0 ? reflect64<32> ( crc ) ^ 0xFFFFFFFFFFFFFFFF :
446 crc64impl ( message + 1, size - 1, crc_table64[reflect64<4> ( static_cast<uint8_t> ( message[0] ) ) ^ ( crc >> ( 64 - 8 ) )] ^ ( crc << 8 ) );
447}
448
450constexpr uint64_t crc64r ( const char* message, const std::size_t size )
451{
452 return crc64impl ( message, size, 0xFFFFFFFFFFFFFFFF );
453}
454
459constexpr const uint64_t operator ""_crc64 ( const char* message, const std::size_t size )
460{
461 return crc64r ( message, size );
462}
463
464/*
465These can be checked here:
466http://www.zorc.breitbandkatze.de/crc.html
467Polynomial is 0x42F0E1EBA9EA3693 for CRC64-ECMA
468*/
469static_assert ( "AeonGames"_crc64 == 0x187936cc3eca327f, "CRC64 Operator Failure." );
470static_assert ( crc64r ( "AeonGames", 9 ) == 0x187936cc3eca327f, "CRC64 Failure." );
471
476constexpr const std::size_t operator ""_id ( const char* message, const std::size_t size )
477{
478 return ( sizeof ( std::size_t ) == 4 ) ? crc32impl ( message, size, 0xFFFFFFFF ) :
479 ( sizeof ( std::size_t ) == 8 ) ? crc64impl ( message, size, 0xFFFFFFFFFFFFFFFF ) : 0;
480}
481
482static_assert ( "AeonGames"_id != 0, "size_t has uncommon size." );
483static_assert ( sizeof ( "AeonGames"_id ) == sizeof ( std::size_t ), "Size of _id operator is different than sizeof(std::size_t)" );
484}
485#endif
486#endif
487#endif
Platform-specific macros, includes, and DLL export/import definitions.
<- This is here just for the literals
Definition AABB.hpp:31
uint32_t crc32i(const char *message, size_t size, uint32_t previous_crc)
Compute the CRC32 of a given message, continuing from a previous CRC value.
Definition CRC.cpp:27
uint64_t crc64i(const char *message, size_t size, uint64_t previous_crc)
Compute the CRC64 of a given message, continuing from a previous CRC value.
Definition CRC.cpp:53