summaryrefslogtreecommitdiff
path: root/enum.h
diff options
context:
space:
mode:
Diffstat (limited to 'enum.h')
-rwxr-xr-xenum.h44
1 files changed, 33 insertions, 11 deletions
diff --git a/enum.h b/enum.h
index d6a94f11e7cd9..ba7c7a826e97f 100755
--- a/enum.h
+++ b/enum.h
@@ -1,4 +1,4 @@
-/* $NetBSD: enum.h,v 1.9 2020/09/01 20:34:51 rillig Exp $ */
+/* $NetBSD: enum.h,v 1.12 2020/09/25 15:54:50 rillig Exp $ */
/*
Copyright (c) 2020 Roland Illig <rillig@NetBSD.org>
@@ -34,7 +34,7 @@
#include <stddef.h>
-typedef struct {
+typedef struct EnumToStringSpec {
int es_value;
const char *es_name;
} EnumToStringSpec;
@@ -108,15 +108,37 @@ const char *Enum_ValueToString(int, const EnumToStringSpec *);
enum { typnam ## _ ## ToStringSize = sizeof joined }
/* Declare the necessary data structures for calling Enum_FlagsToString
+ * for an enum with 2 flags. */
+#define ENUM_FLAGS_RTTI_2(typnam, v1, v2) \
+ ENUM__FLAGS_RTTI(typnam, \
+ ENUM__SPECS_2( \
+ ENUM__SPEC_1(v1), \
+ ENUM__SPEC_1(v2)), \
+ ENUM__JOIN_2( \
+ ENUM__JOIN_STR_1(v1), \
+ ENUM__JOIN_STR_1(v2)))
+
+/* Declare the necessary data structures for calling Enum_FlagsToString
* for an enum with 3 flags. */
#define ENUM_FLAGS_RTTI_3(typnam, v1, v2, v3) \
ENUM__FLAGS_RTTI(typnam, \
ENUM__SPECS_2( \
- ENUM__SPEC_2(v1, v2), \
- ENUM__SPEC_1(v3)), \
+ ENUM__SPEC_2(v1, v2), \
+ ENUM__SPEC_1(v3)), \
+ ENUM__JOIN_2( \
+ ENUM__JOIN_STR_2(v1, v2), \
+ ENUM__JOIN_STR_1(v3)))
+
+/* Declare the necessary data structures for calling Enum_FlagsToString
+ * for an enum with 6 flags. */
+#define ENUM_FLAGS_RTTI_6(typnam, v1, v2, v3, v4, v5, v6) \
+ ENUM__FLAGS_RTTI(typnam, \
+ ENUM__SPECS_2( \
+ ENUM__SPEC_4(v1, v2, v3, v4), \
+ ENUM__SPEC_2(v5, v6)), \
ENUM__JOIN_2( \
- ENUM__JOIN_STR_2(v1, v2), \
- ENUM__JOIN_STR_1(v3)))
+ ENUM__JOIN_STR_4(v1, v2, v3, v4), \
+ ENUM__JOIN_STR_2(v5, v6)))
/* Declare the necessary data structures for calling Enum_FlagsToString
* for an enum with 8 flags. */
@@ -156,8 +178,8 @@ const char *Enum_ValueToString(int, const EnumToStringSpec *);
v17, v18, v19, v20, v21, v22, v23, v24, \
v25, v26, v27, v28, v29, v30, v31) \
ENUM__FLAGS_RTTI(typnam, \
- ENUM__SPECS_5( \
- ENUM__SPEC_16(v01, v02, v03, v04, v05, v06, v07, v08, \
+ ENUM__SPECS_5( \
+ ENUM__SPEC_16(v01, v02, v03, v04, v05, v06, v07, v08, \
v09, v10, v11, v12, v13, v14, v15, v16), \
ENUM__SPEC_8(v17, v18, v19, v20, v21, v22, v23, v24), \
ENUM__SPEC_4(v25, v26, v27, v28), \
@@ -179,8 +201,8 @@ const char *Enum_ValueToString(int, const EnumToStringSpec *);
v17, v18, v19, v20, v21, v22, v23, v24, \
v25, v26, v27, v28, v29, v30, v31, v32) \
ENUM__FLAGS_RTTI(typnam, \
- ENUM__SPECS_2( \
- ENUM__SPEC_16(v01, v02, v03, v04, v05, v06, v07, v08, \
+ ENUM__SPECS_2( \
+ ENUM__SPEC_16(v01, v02, v03, v04, v05, v06, v07, v08, \
v09, v10, v11, v12, v13, v14, v15, v16), \
ENUM__SPEC_16(v17, v18, v19, v20, v21, v22, v23, v24, \
v25, v26, v27, v28, v29, v30, v31, v32)), \
@@ -188,6 +210,6 @@ const char *Enum_ValueToString(int, const EnumToStringSpec *);
ENUM__JOIN_STR_16(v01, v02, v03, v04, v05, v06, v07, v08, \
v09, v10, v11, v12, v13, v14, v15, v16), \
ENUM__JOIN_STR_16(v17, v18, v19, v20, v21, v22, v23, v24, \
- v25, v26, v27, v28, v29, v30, v31, v32)))
+ v25, v26, v27, v28, v29, v30, v31, v32)))
#endif