Nilorea Library
C utilities for networking, threading, graphics
Loading...
Searching...
No Matches
n_enum.h
Go to the documentation of this file.
1
9
#ifndef __N_ENUM_HEADER__
10
#define __N_ENUM_HEADER__
11
12
#include <string.h>
// for strcmp
13
#include <stdbool.h>
14
15
#ifdef __cplusplus
16
extern
"C"
{
17
#endif
18
24
/* MACROS FOR N_ENUMS MACRO ENTRIES (START) */
25
27
#define N_ENUM_ENTRY(class, method) class##__##method
28
30
#define __N_ENUM_MACRO_ENTRY_CASE(element_name) case element_name:
32
#define __N_ENUM_MACRO_ENTRY_COMPARE(element_name) if (!strcmp(#element_name, str_value))
34
#define __N_ENUM_MACRO_ENTRY_COMPARE_EX(element_name) if (!strcmp(#element_name + index, str_value))
36
#define __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name) __##enum_name##_UNKNOWN_VALUE__
37
39
#define __N_ENUM_MACRO_ENTRY_TO_ENUM_ELEMENT(element_name, element_value) \
40
element_name = element_value,
42
#define __N_ENUM_MACRO_ENTRY_TO_ISVALID_CASE(element_name, element_value) \
43
__N_ENUM_MACRO_ENTRY_CASE(element_name) \
44
return true;
46
#define __N_ENUM_MACRO_ENTRY_TO_TOSTRING_CASE(element_name, element_value) \
47
__N_ENUM_MACRO_ENTRY_CASE(element_name) \
48
return #element_name;
50
#define __N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE(element_name, element_value) \
51
__N_ENUM_MACRO_ENTRY_COMPARE(element_name) \
52
return element_name;
54
#define __N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE_EX(element_name, element_value) \
55
__N_ENUM_MACRO_ENTRY_COMPARE_EX(element_name) \
56
return element_name;
58
#define __N_ENUM_MACRO_ENTRY_TO_ISSTRINGVALID_COMPARE(element_name, element_value) \
59
__N_ENUM_MACRO_ENTRY_COMPARE(element_name) \
60
return true;
61
/* MACROS FOR N_ENUMS MACRO ENTRIES (END) */
62
63
/* MACRO FOR ENUM DECLARATION (START) */
65
#define __N_ENUM_DECLARE_ENUM(MACRO_DEFINITION, enum_name) \
66
typedef enum enum_name { \
67
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_ENUM_ELEMENT) \
68
__N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name) \
69
} enum_name;
70
/* MACRO FOR ENUM DECLARATION (END) */
71
72
/* MACRO FOR N_ENUMS FUNCTIONS * PREFIX : __N_ENUM_FUNCTION_ */
74
#define __N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION, enum_name) __N_ENUM_FUNCTION(enum_name);
// MACRO for function declaration (just add ; after function)
76
#define __N_ENUM_FUNCTION_ISVALID(enum_name) \
77
bool N_ENUM_ENTRY(enum_name, isValid)(enum_name value)
79
#define __N_ENUM_FUNCTION_TOSTRING(enum_name) \
80
const char* N_ENUM_ENTRY(enum_name, toString)(enum_name value)
82
#define __N_ENUM_FUNCTION_ISSTRINGVALID(enum_name) \
83
bool N_ENUM_ENTRY(enum_name, isStringValid)(const char* str_value)
85
#define __N_ENUM_FUNCTION_FROMSTRING(enum_name) \
86
enum_name N_ENUM_ENTRY(enum_name, fromString)(const char* str_value)
88
#define __N_ENUM_FUNCTION_FROMSTRING_EX(enum_name) \
89
enum_name N_ENUM_ENTRY(enum_name, fromStringEx)(const char* str_value, int index)
90
/* MACRO FOR N_ENUMS FUNCTIONS (END) */
91
92
/* MACRO FOR N_ENUMS FUNCTIONS DEFINITIONS * PREFIX : __N_ENUM_DEFINE_FUNCTION_ */
94
#define __N_ENUM_DEFINE_FUNCTION_ISVALID(MACRO_DEFINITION, enum_name) \
95
__N_ENUM_FUNCTION_ISVALID(enum_name) { \
96
switch (value) { \
97
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_ISVALID_CASE) \
98
default: \
99
return false; \
100
} \
101
}
103
#define __N_ENUM_DEFINE_FUNCTION_TOSTRING(MACRO_DEFINITION, enum_name) \
104
__N_ENUM_FUNCTION_TOSTRING(enum_name) { \
105
switch (value) { \
106
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_TOSTRING_CASE) \
107
default: \
108
return 0; \
109
} \
110
}
112
#define __N_ENUM_DEFINE_FUNCTION_ISSTRINGVALID(MACRO_DEFINITION, enum_name) \
113
__N_ENUM_FUNCTION_ISSTRINGVALID(enum_name) { \
114
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_ISSTRINGVALID_COMPARE) \
115
return false; \
116
}
118
#define __N_ENUM_DEFINE_FUNCTION_FROMSTRING(MACRO_DEFINITION, enum_name) \
119
__N_ENUM_FUNCTION_FROMSTRING(enum_name) { \
120
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE) \
121
return __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name); \
122
}
124
#define __N_ENUM_DEFINE_FUNCTION_FROMSTRING_EX(MACRO_DEFINITION, enum_name) \
125
__N_ENUM_FUNCTION_FROMSTRING_EX(enum_name) { \
126
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE_EX) \
127
return __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name); \
128
}
129
/* MACRO FOR N_ENUMS FUNCTIONS DEFINITIONS (END) */
130
131
/* N_ENUM DECLARATION */
133
#define N_ENUM_DECLARE(MACRO_DEFINITION, enum_name) \
134
__N_ENUM_DECLARE_ENUM(MACRO_DEFINITION, enum_name) \
135
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_ISVALID, enum_name) \
136
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_ISSTRINGVALID, enum_name) \
137
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_TOSTRING, enum_name) \
138
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_FROMSTRING, enum_name) \
139
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_FROMSTRING_EX, enum_name)
140
/* N_ENUM DECLARATION (END) */
141
142
/* N_ENUM DEFINITION */
144
#define N_ENUM_DEFINE(MACRO_DEFINITION, enum_name) \
145
__N_ENUM_DEFINE_FUNCTION_ISVALID(MACRO_DEFINITION, enum_name) \
146
__N_ENUM_DEFINE_FUNCTION_ISSTRINGVALID(MACRO_DEFINITION, enum_name) \
147
__N_ENUM_DEFINE_FUNCTION_TOSTRING(MACRO_DEFINITION, enum_name) \
148
__N_ENUM_DEFINE_FUNCTION_FROMSTRING(MACRO_DEFINITION, enum_name) \
149
__N_ENUM_DEFINE_FUNCTION_FROMSTRING_EX(MACRO_DEFINITION, enum_name)
150
/* N_ENUM DEFINITION (END) */
151
156
#ifdef __cplusplus
157
}
158
#endif
159
160
#endif
// header guard
include
nilorea
n_enum.h
Generated on Wed Jul 16 2025 22:55:56 for Nilorea Library by
1.9.8