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
* Licensed under the Apache License, Version 2.0 (the "License");
6
* you may not use this file except in compliance with the License.
7
* You may obtain a copy of the License at
8
*
9
* http://www.apache.org/licenses/LICENSE-2.0
10
*
11
* Unless required by applicable law or agreed to in writing, software
12
* distributed under the License is distributed on an "AS IS" BASIS,
13
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
14
* implied. See the License for the specific language governing
15
* permissions and limitations under the License.
16
*
17
* SPDX-License-Identifier: Apache-2.0
18
*/
19
27
28
#ifndef __N_ENUM_HEADER__
29
#define __N_ENUM_HEADER__
30
31
#include <string.h>
// for strcmp
32
#include <stdbool.h>
33
34
#ifdef __cplusplus
35
extern
"C"
{
36
#endif
37
42
43
/* MACROS FOR N_ENUMS MACRO ENTRIES (START) */
44
46
#define N_ENUM_ENTRY(class, method) class##__##method
47
49
#define __N_ENUM_MACRO_ENTRY_CASE(element_name) case element_name:
51
#define __N_ENUM_MACRO_ENTRY_COMPARE(element_name) if (!strcmp(#element_name, str_value))
56
#define __N_ENUM_MACRO_ENTRY_COMPARE_EX(element_name) if (!strcmp(&(#element_name)[index], str_value))
58
#define __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name) __##enum_name##_UNKNOWN_VALUE__
59
61
#define __N_ENUM_MACRO_ENTRY_TO_ENUM_ELEMENT(element_name, element_value) \
62
element_name = element_value,
63
64
#define __N_ENUM_MACRO_ENTRY_TO_ISVALID_CASE(element_name, element_value) \
65
__N_ENUM_MACRO_ENTRY_CASE(element_name) \
66
return true;
67
68
#define __N_ENUM_MACRO_ENTRY_TO_TOSTRING_CASE(element_name, element_value) \
69
__N_ENUM_MACRO_ENTRY_CASE(element_name) \
70
return #element_name;
71
72
#define __N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE(element_name, element_value) \
73
__N_ENUM_MACRO_ENTRY_COMPARE(element_name) \
74
return element_name;
75
76
#define __N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE_EX(element_name, element_value) \
77
__N_ENUM_MACRO_ENTRY_COMPARE_EX(element_name) \
78
return element_name;
79
80
#define __N_ENUM_MACRO_ENTRY_TO_ISSTRINGVALID_COMPARE(element_name, element_value) \
81
__N_ENUM_MACRO_ENTRY_COMPARE(element_name) \
82
return true;
83
/* MACROS FOR N_ENUMS MACRO ENTRIES (END) */
84
85
/* MACRO FOR ENUM DECLARATION (START) */
87
#define __N_ENUM_DECLARE_ENUM(MACRO_DEFINITION, enum_name) \
88
typedef enum enum_name { \
89
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_ENUM_ELEMENT) \
90
__N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name) \
91
} enum_name;
92
/* MACRO FOR ENUM DECLARATION (END) */
93
94
/* MACRO FOR N_ENUMS FUNCTIONS * PREFIX : __N_ENUM_FUNCTION_ */
96
#define __N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION, enum_name) __N_ENUM_FUNCTION(enum_name);
// MACRO for function declaration (just add ; after function)
98
#define __N_ENUM_FUNCTION_ISVALID(enum_name) \
99
bool N_ENUM_ENTRY(enum_name, isValid)(enum_name value)
100
101
#define __N_ENUM_FUNCTION_TOSTRING(enum_name) \
102
const char* N_ENUM_ENTRY(enum_name, toString)(enum_name value)
103
104
#define __N_ENUM_FUNCTION_ISSTRINGVALID(enum_name) \
105
bool N_ENUM_ENTRY(enum_name, isStringValid)(const char* str_value)
106
107
#define __N_ENUM_FUNCTION_FROMSTRING(enum_name) \
108
enum_name N_ENUM_ENTRY(enum_name, fromString)(const char* str_value)
109
110
#define __N_ENUM_FUNCTION_FROMSTRING_EX(enum_name) \
111
enum_name N_ENUM_ENTRY(enum_name, fromStringEx)(const char* str_value, int index)
112
/* MACRO FOR N_ENUMS FUNCTIONS (END) */
113
114
/* MACRO FOR N_ENUMS FUNCTIONS DEFINITIONS * PREFIX : __N_ENUM_DEFINE_FUNCTION_ */
116
#define __N_ENUM_DEFINE_FUNCTION_ISVALID(MACRO_DEFINITION, enum_name) \
117
__N_ENUM_FUNCTION_ISVALID(enum_name) { \
118
switch (value) { \
119
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_ISVALID_CASE) \
120
default: \
121
return false; \
122
} \
123
}
124
125
#define __N_ENUM_DEFINE_FUNCTION_TOSTRING(MACRO_DEFINITION, enum_name) \
126
__N_ENUM_FUNCTION_TOSTRING(enum_name) { \
127
switch (value) { \
128
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_TOSTRING_CASE) \
129
default: \
130
return 0; \
131
} \
132
}
133
134
#define __N_ENUM_DEFINE_FUNCTION_ISSTRINGVALID(MACRO_DEFINITION, enum_name) \
135
__N_ENUM_FUNCTION_ISSTRINGVALID(enum_name) { \
136
if (!str_value) return false; \
137
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_ISSTRINGVALID_COMPARE) \
138
return false; \
139
}
140
141
#define __N_ENUM_DEFINE_FUNCTION_FROMSTRING(MACRO_DEFINITION, enum_name) \
142
__N_ENUM_FUNCTION_FROMSTRING(enum_name) { \
143
if (!str_value) return __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name); \
144
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE) \
145
return __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name); \
146
}
147
148
#define __N_ENUM_DEFINE_FUNCTION_FROMSTRING_EX(MACRO_DEFINITION, enum_name) \
149
__N_ENUM_FUNCTION_FROMSTRING_EX(enum_name) { \
150
if (!str_value) return __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name); \
151
MACRO_DEFINITION(__N_ENUM_MACRO_ENTRY_TO_FROMSTRING_COMPARE_EX) \
152
return __N_ENUM_MACRO_ENTRY_UNKNOWN_VALUE(enum_name); \
153
}
154
/* MACRO FOR N_ENUMS FUNCTIONS DEFINITIONS (END) */
155
156
/* N_ENUM DECLARATION */
158
#define N_ENUM_DECLARE(MACRO_DEFINITION, enum_name) \
159
__N_ENUM_DECLARE_ENUM(MACRO_DEFINITION, enum_name) \
160
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_ISVALID, enum_name) \
161
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_ISSTRINGVALID, enum_name) \
162
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_TOSTRING, enum_name) \
163
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_FROMSTRING, enum_name) \
164
__N_ENUM_DECLARE_FUNCTION(__N_ENUM_FUNCTION_FROMSTRING_EX, enum_name)
165
/* N_ENUM DECLARATION (END) */
166
167
/* N_ENUM DEFINITION */
169
#define N_ENUM_DEFINE(MACRO_DEFINITION, enum_name) \
170
__N_ENUM_DEFINE_FUNCTION_ISVALID(MACRO_DEFINITION, enum_name) \
171
__N_ENUM_DEFINE_FUNCTION_ISSTRINGVALID(MACRO_DEFINITION, enum_name) \
172
__N_ENUM_DEFINE_FUNCTION_TOSTRING(MACRO_DEFINITION, enum_name) \
173
__N_ENUM_DEFINE_FUNCTION_FROMSTRING(MACRO_DEFINITION, enum_name) \
174
__N_ENUM_DEFINE_FUNCTION_FROMSTRING_EX(MACRO_DEFINITION, enum_name)
175
/* N_ENUM DEFINITION (END) */
176
180
181
#ifdef __cplusplus
182
}
183
#endif
184
185
#endif
// header guard
include
nilorea
n_enum.h
Generated on
for Nilorea Library by
1.15.0