18 lines
726 B
C
18 lines
726 B
C
#ifndef INC_UTIL_H
|
|
#define INC_UTIL_H
|
|
|
|
// This is wacky preprocessor magic that allows us to count the number of
|
|
// members of an enum. Unfortunately, it doesn't work with enum classes, so we
|
|
// have to use C-style enums.
|
|
|
|
// The preprocessor magic is so wacky we have to prevent GCC from failing with a
|
|
// -Werror=pedantic when compiling the simulator
|
|
#pragma GCC diagnostic ignored "-Wpedantic"
|
|
|
|
#define CountedEnum(NAME, TYPE, ...) \
|
|
typedef enum { __VA_ARGS__ } NAME; \
|
|
static const size_t NAME##_COUNT = \
|
|
sizeof(__extension__(int[]){__VA_ARGS__}) / sizeof(int);
|
|
|
|
#endif // INC_UTIL_H
|