From f2a90e2a12b976abb0052229b5ce3f6163508a8f Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Thu, 21 Sep 2023 11:25:25 +0100 Subject: [PATCH] macros.h: Implement side_enum_t side_enum_t allows defining fixed-sized enumerations while preserving typing information. Signed-off-by: Mathieu Desnoyers --- include/side/macros.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/include/side/macros.h b/include/side/macros.h index 20fa97e..3915374 100644 --- a/include/side/macros.h +++ b/include/side/macros.h @@ -123,4 +123,24 @@ #define SIDE_PTR_INIT(...) { .v = (uintptr_t) (__VA_ARGS__) } +/* + * side_enum_t allows defining fixed-sized enumerations while preserving + * typing information. + */ +#define side_enum_t(_enum_type, _size_type) \ + union { \ + _size_type v; \ + _enum_type t[0]; \ + } + +#define side_enum_get(_field) \ + ((__typeof__((_field).t[0]))(_field).v) + +#define side_enum_set(_field, _v) \ + do { \ + (_field).v = (_v); \ + } while (0) + +#define SIDE_ENUM_INIT(...) { .v = (__VA_ARGS__) } + #endif /* _SIDE_MACROS_H */ -- 2.34.1