Nilorea Library
C utilities for networking, threading, graphics
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
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) return true;
45
#define __N_ENUM_MACRO_ENTRY_TO_TOSTRING_CASE(element_name, element_value)\
46
__N_ENUM_MACRO_ENTRY_CASE(element_name) return #element_name;
48
#define __N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE(element_name, element_value)\
49
__N_ENUM_MACRO_ENTRY_COMPARE(element_name) return element_name;
51
#define __N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE_EX(element_name, element_value)\
52
__N_ENUM_MACRO_ENTRY_COMPARE_EX(element_name) return element_name;
54
#define __N_ENUM_MACRO_ENTRY_TO_ISSTRINGVALID_COMPARE(element_name, element_value)\
55
__N_ENUM_MACRO_ENTRY_COMPARE(element_name) return true;
56
/* MACROS FOR N_ENUMS MACRO ENTRIES (END) */
57
58
/* MACRO FOR ENUM DECLARATION (START) */
60
#define __N_ENUM_DECLARE_ENUM(MACRO_DEFINITION, enum_name)\
61
typedef enum enum_name\
62
{\
63
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_ENUM_ELEMENT)\
64
__N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name)\
65
}\
66
enum_name;
67
/* MACRO FOR ENUM DECLARATION (END) */
68
69
/* MACRO FOR N_ENUMS FUNCTIONS * PREFIX : __N_ENUM_FUNCTION_ */
71
#define __N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION, enum_name) __N_ENUM_FUNCTION(enum_name);
// MACRO for function declaration (just add ; after function)
73
#define __N_ENUM_FUNCTION_ISVALID(enum_name)\
74
bool N_ENUM_ENTRY(enum_name, isValid)(enum_name value)
76
#define __N_ENUM_FUNCTION_TOSTRING(enum_name)\
77
const char* N_ENUM_ENTRY(enum_name, toString)(enum_name value)
79
#define __N_ENUM_FUNCTION_ISSTRINGVALID(enum_name)\
80
bool N_ENUM_ENTRY(enum_name, isStringValid)(const char* str_value)
82
#define __N_ENUM_FUNCTION_FROMSTRING(enum_name)\
83
enum_name N_ENUM_ENTRY(enum_name, fromString)(const char* str_value)
85
#define __N_ENUM_FUNCTION_FROMSTRING_EX(enum_name)\
86
enum_name N_ENUM_ENTRY(enum_name, fromStringEx)(const char* str_value, int index)
87
/* MACRO FOR N_ENUMS FUNCTIONS (END) */
88
89
/* MACRO FOR N_ENUMS FUNCTIONS DEFINITIONS * PREFIX : __N_ENUM_DEFINE_FUNCTION_ */
91
#define __N_ENUM_DEFINE_FUNCTION_ISVALID(MACRO_DEFINITION, enum_name)\
92
__N_ENUM_FUNCTION_ISVALID(enum_name)\
93
{\
94
switch(value)\
95
{\
96
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_ISVALID_CASE)\
97
default: return false;\
98
}\
99
}
101
#define __N_ENUM_DEFINE_FUNCTION_TOSTRING(MACRO_DEFINITION, enum_name)\
102
__N_ENUM_FUNCTION_TOSTRING(enum_name)\
103
{\
104
switch(value)\
105
{\
106
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_TOSTRING_CASE)\
107
default: return 0;\
108
}\
109
}
111
#define __N_ENUM_DEFINE_FUNCTION_ISSTRINGVALID(MACRO_DEFINITION, enum_name)\
112
__N_ENUM_FUNCTION_ISSTRINGVALID(enum_name)\
113
{\
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
{\
121
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE)\
122
return __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name);\
123
}
125
#define __N_ENUM_DEFINE_FUNCTION_FROMSTRING_EX(MACRO_DEFINITION, enum_name)\
126
__N_ENUM_FUNCTION_FROMSTRING_EX(enum_name)\
127
{\
128
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE_EX)\
129
return __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name);\
130
}
131
/* MACRO FOR N_ENUMS FUNCTIONS DEFINITIONS (END) */
132
133
/* N_ENUM DECLARATION */
135
#define N_ENUM_DECLARE(MACRO_DEFINITION, enum_name)\
136
__N_ENUM_DECLARE_ENUM(MACRO_DEFINITION, enum_name)\
137
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_ISVALID, enum_name)\
138
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_ISSTRINGVALID, enum_name)\
139
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_TOSTRING, enum_name)\
140
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_FROMSTRING, enum_name)\
141
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_FROMSTRING_EX, enum_name)
142
/* N_ENUM DECLARATION (END) */
143
144
/* N_ENUM DEFINITION */
146
#define N_ENUM_DEFINE(MACRO_DEFINITION, enum_name)\
147
__N_ENUM_DEFINE_FUNCTION_ISVALID(MACRO_DEFINITION, enum_name)\
148
__N_ENUM_DEFINE_FUNCTION_ISSTRINGVALID(MACRO_DEFINITION, enum_name)\
149
__N_ENUM_DEFINE_FUNCTION_TOSTRING(MACRO_DEFINITION, enum_name)\
150
__N_ENUM_DEFINE_FUNCTION_FROMSTRING(MACRO_DEFINITION, enum_name)\
151
__N_ENUM_DEFINE_FUNCTION_FROMSTRING_EX(MACRO_DEFINITION, enum_name)
152
/* N_ENUM DEFINITION (END) */
153
158
#ifdef __cplusplus
159
}
160
#endif
161
162
#endif
// header guard
include
nilorea
n_enum.h
Generated on Thu Dec 14 2023 17:37:42 for Nilorea Library by
1.9.4