diff options
Diffstat (limited to 'enum.h')
-rwxr-xr-x | enum.h | 44 |
1 files changed, 33 insertions, 11 deletions
@@ -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 |