Nilorea Library
C utilities for networking, threading, graphics
Loading...
Searching...
No Matches
n_enum.h
Go to the documentation of this file.
1
/*
2
* Nilorea Library
3
* Copyright (C) 2005-2026 Castagnier Mickael
4
*
5
* This program is free software: you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation, either version 3 of the License, or
8
* (at your option) any later version.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program. If not, see <https://www.gnu.org/licenses/>.
17
*/
18
27
#ifndef __N_ENUM_HEADER__
28
#define __N_ENUM_HEADER__
29
30
#include <string.h>
// for strcmp
31
#include <stdbool.h>
32
33
#ifdef __cplusplus
34
extern
"C"
{
35
#endif
36
42
/* MACROS FOR N_ENUMS MACRO ENTRIES (START) */
43
45
#define N_ENUM_ENTRY(class, method) class##__##method
46
48
#define __N_ENUM_MACRO_ENTRY_CASE(element_name) case element_name:
50
#define __N_ENUM_MACRO_ENTRY_COMPARE(element_name) if (!strcmp(#element_name, str_value))
52
#define __N_ENUM_MACRO_ENTRY_COMPARE_EX(element_name) if (!strcmp(#element_name + index, str_value))
54
#define __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name) __##enum_name##_UNKNOWN_VALUE__
55
57
#define __N_ENUM_MACRO_ENTRY_TO_ENUM_ELEMENT(element_name, element_value) \
58
element_name = element_value,
60
#define __N_ENUM_MACRO_ENTRY_TO_ISVALID_CASE(element_name, element_value) \
61
__N_ENUM_MACRO_ENTRY_CASE(element_name) \
62
return true;
64
#define __N_ENUM_MACRO_ENTRY_TO_TOSTRING_CASE(element_name, element_value) \
65
__N_ENUM_MACRO_ENTRY_CASE(element_name) \
66
return #element_name;
68
#define __N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE(element_name, element_value) \
69
__N_ENUM_MACRO_ENTRY_COMPARE(element_name) \
70
return element_name;
72
#define __N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE_EX(element_name, element_value) \
73
__N_ENUM_MACRO_ENTRY_COMPARE_EX(element_name) \
74
return element_name;
76
#define __N_ENUM_MACRO_ENTRY_TO_ISSTRINGVALID_COMPARE(element_name, element_value) \
77
__N_ENUM_MACRO_ENTRY_COMPARE(element_name) \
78
return true;
79
/* MACROS FOR N_ENUMS MACRO ENTRIES (END) */
80
81
/* MACRO FOR ENUM DECLARATION (START) */
83
#define __N_ENUM_DECLARE_ENUM(MACRO_DEFINITION, enum_name) \
84
typedef enum enum_name { \
85
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_ENUM_ELEMENT) \
86
__N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name) \
87
} enum_name;
88
/* MACRO FOR ENUM DECLARATION (END) */
89
90
/* MACRO FOR N_ENUMS FUNCTIONS * PREFIX : __N_ENUM_FUNCTION_ */
92
#define __N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION, enum_name) __N_ENUM_FUNCTION(enum_name);
// MACRO for function declaration (just add ; after function)
94
#define __N_ENUM_FUNCTION_ISVALID(enum_name) \
95
bool N_ENUM_ENTRY(enum_name, isValid)(enum_name value)
97
#define __N_ENUM_FUNCTION_TOSTRING(enum_name) \
98
const char* N_ENUM_ENTRY(enum_name, toString)(enum_name value)
100
#define __N_ENUM_FUNCTION_ISSTRINGVALID(enum_name) \
101
bool N_ENUM_ENTRY(enum_name, isStringValid)(const char* str_value)
103
#define __N_ENUM_FUNCTION_FROMSTRING(enum_name) \
104
enum_name N_ENUM_ENTRY(enum_name, fromString)(const char* str_value)
106
#define __N_ENUM_FUNCTION_FROMSTRING_EX(enum_name) \
107
enum_name N_ENUM_ENTRY(enum_name, fromStringEx)(const char* str_value, int index)
108
/* MACRO FOR N_ENUMS FUNCTIONS (END) */
109
110
/* MACRO FOR N_ENUMS FUNCTIONS DEFINITIONS * PREFIX : __N_ENUM_DEFINE_FUNCTION_ */
112
#define __N_ENUM_DEFINE_FUNCTION_ISVALID(MACRO_DEFINITION, enum_name) \
113
__N_ENUM_FUNCTION_ISVALID(enum_name) { \
114
switch (value) { \
115
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_ISVALID_CASE) \
116
default: \
117
return false; \
118
} \
119
}
121
#define __N_ENUM_DEFINE_FUNCTION_TOSTRING(MACRO_DEFINITION, enum_name) \
122
__N_ENUM_FUNCTION_TOSTRING(enum_name) { \
123
switch (value) { \
124
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_TOSTRING_CASE) \
125
default: \
126
return 0; \
127
} \
128
}
130
#define __N_ENUM_DEFINE_FUNCTION_ISSTRINGVALID(MACRO_DEFINITION, enum_name) \
131
__N_ENUM_FUNCTION_ISSTRINGVALID(enum_name) { \
132
if (!str_value) return false; \
133
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_ISSTRINGVALID_COMPARE) \
134
return false; \
135
}
137
#define __N_ENUM_DEFINE_FUNCTION_FROMSTRING(MACRO_DEFINITION, enum_name) \
138
__N_ENUM_FUNCTION_FROMSTRING(enum_name) { \
139
if (!str_value) return __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name); \
140
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE) \
141
return __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name); \
142
}
144
#define __N_ENUM_DEFINE_FUNCTION_FROMSTRING_EX(MACRO_DEFINITION, enum_name) \
145
__N_ENUM_FUNCTION_FROMSTRING_EX(enum_name) { \
146
if (!str_value) return __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name); \
147
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE_EX) \
148
return __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name); \
149
}
150
/* MACRO FOR N_ENUMS FUNCTIONS DEFINITIONS (END) */
151
152
/* N_ENUM DECLARATION */
154
#define N_ENUM_DECLARE(MACRO_DEFINITION, enum_name) \
155
__N_ENUM_DECLARE_ENUM(MACRO_DEFINITION, enum_name) \
156
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_ISVALID, enum_name) \
157
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_ISSTRINGVALID, enum_name) \
158
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_TOSTRING, enum_name) \
159
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_FROMSTRING, enum_name) \
160
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_FROMSTRING_EX, enum_name)
161
/* N_ENUM DECLARATION (END) */
162
163
/* N_ENUM DEFINITION */
165
#define N_ENUM_DEFINE(MACRO_DEFINITION, enum_name) \
166
__N_ENUM_DEFINE_FUNCTION_ISVALID(MACRO_DEFINITION, enum_name) \
167
__N_ENUM_DEFINE_FUNCTION_ISSTRINGVALID(MACRO_DEFINITION, enum_name) \
168
__N_ENUM_DEFINE_FUNCTION_TOSTRING(MACRO_DEFINITION, enum_name) \
169
__N_ENUM_DEFINE_FUNCTION_FROMSTRING(MACRO_DEFINITION, enum_name) \
170
__N_ENUM_DEFINE_FUNCTION_FROMSTRING_EX(MACRO_DEFINITION, enum_name)
171
/* N_ENUM DEFINITION (END) */
172
177
#ifdef __cplusplus
178
}
179
#endif
180
181
#endif
// header guard
include
nilorea
n_enum.h
Generated on Wed Apr 1 2026 20:44:56 for Nilorea Library by
1.9.8