summaryrefslogtreecommitdiffstats
path: root/src/libnetdata/template-enum.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-07-24 09:54:23 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-07-24 09:54:44 +0000
commit836b47cb7e99a977c5a23b059ca1d0b5065d310e (patch)
tree1604da8f482d02effa033c94a84be42bc0c848c3 /src/libnetdata/template-enum.h
parentReleasing debian version 1.44.3-2. (diff)
downloadnetdata-836b47cb7e99a977c5a23b059ca1d0b5065d310e.tar.xz
netdata-836b47cb7e99a977c5a23b059ca1d0b5065d310e.zip
Merging upstream version 1.46.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/libnetdata/template-enum.h')
-rw-r--r--src/libnetdata/template-enum.h40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/libnetdata/template-enum.h b/src/libnetdata/template-enum.h
new file mode 100644
index 000000000..393a6a945
--- /dev/null
+++ b/src/libnetdata/template-enum.h
@@ -0,0 +1,40 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_TEMPLATE_ENUM_H
+#define NETDATA_TEMPLATE_ENUM_H
+
+#define ENUM_STR_MAP_DEFINE(type) \
+ static struct { \
+ type id; \
+ const char *name; \
+ } type ## _names[]
+
+#define ENUM_STR_DEFINE_FUNCTIONS_EXTERN(type) \
+ type type ## _2id(const char *str); \
+ const char *type##_2str(type id);
+
+#define ENUM_STR_DEFINE_FUNCTIONS(type, def, def_str) \
+ type type##_2id(const char *str) \
+ { \
+ if (!str || !*str) \
+ return def; \
+ \
+ for (size_t i = 0; type ## _names[i].name; i++) { \
+ if (strcmp(type ## _names[i].name, str) == 0) \
+ return type ## _names[i].id; \
+ } \
+ \
+ return def; \
+ } \
+ \
+ const char *type##_2str(type id) \
+ { \
+ for (size_t i = 0; type ## _names[i].name; i++) { \
+ if (id == type ## _names[i].id) \
+ return type ## _names[i].name; \
+ } \
+ \
+ return def_str; \
+ }
+
+#endif //NETDATA_TEMPLATE_ENUM_H