macros.h: Implement side_enum_t
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 21 Sep 2023 10:25:25 +0000 (11:25 +0100)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 21 Sep 2023 10:25:25 +0000 (11:25 +0100)
side_enum_t allows defining fixed-sized enumerations while preserving
typing information.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
include/side/macros.h

index 20fa97e804f07d76aae19d2afe1fe765620e6812..391537439e84741e0341f6b5d190f3c73a3ba641 100644 (file)
 
 #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 */
This page took 0.040371 seconds and 4 git commands to generate.