Nilorea Library
C utilities for networking, threading, graphics
Loading...
Searching...
No Matches
n_enum.h
Go to the documentation of this file.
1
8
#ifndef __N_ENUM_HEADER__
9
#define __N_ENUM_HEADER__
10
11
#include <string.h>
// for strcmp
12
#include <stdbool.h>
13
14
#ifdef __cplusplus
15
extern
"C"
{
16
#endif
17
23
/* MACROS FOR N_ENUMS MACRO ENTRIES (START) */
24
26
#define N_ENUM_ENTRY(class, method) class##_##method
27
29
#define __N_ENUM_MACRO_ENTRY_CASE(element_name) case element_name:
31
#define __N_ENUM_MACRO_ENTRY_COMPARE(element_name) if (!strcmp(#element_name, str_value))
33
#define __N_ENUM_MACRO_ENTRY_COMPARE_EX(element_name) if (!strcmp(#element_name + index, str_value))
35
#define __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name) __##enum_name##_UNKNOWN_VALUE__
36
38
#define __N_ENUM_MACRO_ENTRY_TO_ENUM_ELEMENT(element_name, element_value) \
39
element_name = element_value,
41
#define __N_ENUM_MACRO_ENTRY_TO_ISVALID_CASE(element_name, element_value) \
42
__N_ENUM_MACRO_ENTRY_CASE(element_name) \
43
return true;
45
#define __N_ENUM_MACRO_ENTRY_TO_TOSTRING_CASE(element_name, element_value) \
46
__N_ENUM_MACRO_ENTRY_CASE(element_name) \
47
return #element_name;
49
#define __N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE(element_name, element_value) \
50
__N_ENUM_MACRO_ENTRY_COMPARE(element_name) \
51
return element_name;
53
#define __N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE_EX(element_name, element_value) \
54
__N_ENUM_MACRO_ENTRY_COMPARE_EX(element_name) \
55
return element_name;
57
#define __N_ENUM_MACRO_ENTRY_TO_ISSTRINGVALID_COMPARE(element_name, element_value) \
58
__N_ENUM_MACRO_ENTRY_COMPARE(element_name) \
59
return true;
60
/* MACROS FOR N_ENUMS MACRO ENTRIES (END) */
61
62
/* MACRO FOR ENUM DECLARATION (START) */
64
#define __N_ENUM_DECLARE_ENUM(MACRO_DEFINITION, enum_name) \
65
typedef enum enum_name { \
66
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_ENUM_ELEMENT) \
67
__N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name) \
68
} enum_name;
69
/* MACRO FOR ENUM DECLARATION (END) */
70
71
/* MACRO FOR N_ENUMS FUNCTIONS * PREFIX : __N_ENUM_FUNCTION_ */
73
#define __N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION, enum_name) __N_ENUM_FUNCTION(enum_name);
// MACRO for function declaration (just add ; after function)
75
#define __N_ENUM_FUNCTION_ISVALID(enum_name) \
76
bool N_ENUM_ENTRY(enum_name, isValid)(enum_name value)
78
#define __N_ENUM_FUNCTION_TOSTRING(enum_name) \
79
const char* N_ENUM_ENTRY(enum_name, toString)(enum_name value)
81
#define __N_ENUM_FUNCTION_ISSTRINGVALID(enum_name) \
82
bool N_ENUM_ENTRY(enum_name, isStringValid)(const char* str_value)
84
#define __N_ENUM_FUNCTION_FROMSTRING(enum_name) \
85
enum_name N_ENUM_ENTRY(enum_name, fromString)(const char* str_value)
87
#define __N_ENUM_FUNCTION_FROMSTRING_EX(enum_name) \
88
enum_name N_ENUM_ENTRY(enum_name, fromStringEx)(const char* str_value, int index)
89
/* MACRO FOR N_ENUMS FUNCTIONS (END) */
90
91
/* MACRO FOR N_ENUMS FUNCTIONS DEFINITIONS * PREFIX : __N_ENUM_DEFINE_FUNCTION_ */
93
#define __N_ENUM_DEFINE_FUNCTION_ISVALID(MACRO_DEFINITION, enum_name) \
94
__N_ENUM_FUNCTION_ISVALID(enum_name) { \
95
switch (value) { \
96
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_ISVALID_CASE) \
97
default: \
98
return false; \
99
} \
100
}
102
#define __N_ENUM_DEFINE_FUNCTION_TOSTRING(MACRO_DEFINITION, enum_name) \
103
__N_ENUM_FUNCTION_TOSTRING(enum_name) { \
104
switch (value) { \
105
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_TOSTRING_CASE) \
106
default: \
107
return 0; \
108
} \
109
}
111
#define __N_ENUM_DEFINE_FUNCTION_ISSTRINGVALID(MACRO_DEFINITION, enum_name) \
112
__N_ENUM_FUNCTION_ISSTRINGVALID(enum_name) { \
113
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_ISSTRINGVALID_COMPARE) \
114
return false; \
115
}
117
#define __N_ENUM_DEFINE_FUNCTION_FROMSTRING(MACRO_DEFINITION, enum_name) \
118
__N_ENUM_FUNCTION_FROMSTRING(enum_name) { \
119
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE) \
120
return __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name); \
121
}
123
#define __N_ENUM_DEFINE_FUNCTION_FROMSTRING_EX(MACRO_DEFINITION, enum_name) \
124
__N_ENUM_FUNCTION_FROMSTRING_EX(enum_name) { \
125
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE_EX) \
126
return __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name); \
127
}
128
/* MACRO FOR N_ENUMS FUNCTIONS DEFINITIONS (END) */
129
130
/* N_ENUM DECLARATION */
132
#define N_ENUM_DECLARE(MACRO_DEFINITION, enum_name) \
133
__N_ENUM_DECLARE_ENUM(MACRO_DEFINITION, enum_name) \
134
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_ISVALID, enum_name) \
135
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_ISSTRINGVALID, enum_name) \
136
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_TOSTRING, enum_name) \
137
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_FROMSTRING, enum_name) \
138
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_FROMSTRING_EX, enum_name)
139
/* N_ENUM DECLARATION (END) */
140
141
/* N_ENUM DEFINITION */
143
#define N_ENUM_DEFINE(MACRO_DEFINITION, enum_name) \
144
__N_ENUM_DEFINE_FUNCTION_ISVALID(MACRO_DEFINITION, enum_name) \
145
__N_ENUM_DEFINE_FUNCTION_ISSTRINGVALID(MACRO_DEFINITION, enum_name) \
146
__N_ENUM_DEFINE_FUNCTION_TOSTRING(MACRO_DEFINITION, enum_name) \
147
__N_ENUM_DEFINE_FUNCTION_FROMSTRING(MACRO_DEFINITION, enum_name) \
148
__N_ENUM_DEFINE_FUNCTION_FROMSTRING_EX(MACRO_DEFINITION, enum_name)
149
/* N_ENUM DEFINITION (END) */
150
155
#ifdef __cplusplus
156
}
157
#endif
158
159
#endif
// header guard
include
nilorea
n_enum.h
Generated on Mon Jun 9 2025 22:06:43 for Nilorea Library by
1.9.8