#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