| 49 #define INVALID_CHECKMATE 11 |
49 #define INVALID_CHECKMATE 11 |
| 50 #define RULES_VIOLATED 32 |
50 #define RULES_VIOLATED 32 |
| 51 |
51 |
| 52 #ifdef __cplusplus |
52 #ifdef __cplusplus |
| 53 extern "C" { |
53 extern "C" { |
| |
54 #endif |
| |
55 |
| |
56 #if defined(__cplusplus) || \ |
| |
57 (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202310L) |
| 54 #define enum_byte(name) enum e##name : uint8_t |
58 #define enum_byte(name) enum e##name : uint8_t |
| 55 #define typedef_enum_byte(name) typedef enum e##name name |
59 #define typedef_enum_byte(name) typedef enum e##name name |
| 56 #elif __STDC_VERSION__ < 202310L |
60 #else |
| 57 /* since #warning is also a C23 feature, the only hope is this: */ |
61 /* since #warning is also a C23 feature, the only hope is this: */ |
| 58 #pragma GCC warning "Type safety for enums is only available since C23" |
62 #pragma GCC warning "Type safety for enums is only available since C23" |
| 59 #define enum_byte(name) enum e##name |
63 #define enum_byte(name) enum e##name |
| 60 #define typedef_enum_byte(name) typedef uint8_t name |
64 #define typedef_enum_byte(name) typedef uint8_t name |
| 61 #else |
|
| 62 #define enum_byte(name) enum e##name : uint8_t |
|
| 63 #define typedef_enum_byte(name) typedef enum e##name name |
|
| 64 #endif |
65 #endif |
| 65 |
66 |
| 66 #define ENPASSANT_THREAT 0x40u |
67 #define ENPASSANT_THREAT 0x40u |
| 67 |
68 |
| 68 enum_byte(Color) { |
69 enum_byte(Color) { |