summaryrefslogtreecommitdiffstats
path: root/core/xmlparams.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/xmlparams.h')
-rw-r--r--core/xmlparams.h40
1 files changed, 40 insertions, 0 deletions
diff --git a/core/xmlparams.h b/core/xmlparams.h
new file mode 100644
index 000000000..38e175935
--- /dev/null
+++ b/core/xmlparams.h
@@ -0,0 +1,40 @@
+// SPDX-License-Identifier: GPL-2.0
+// Small helper class that keeps track of key/value pairs to
+// pass to the XML-routines as parameters. Uses C++ for memory
+// management, but provides a C interface via anonymous struct.
+
+#ifdef __cplusplus
+#include <string>
+#include <vector>
+
+struct xml_params {
+ std::vector<std::pair<std::string, std::string>> items;
+ mutable std::vector<const char *> data;
+};
+
+#else
+
+struct xml_params;
+
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Return values marked as "not stable" may be invalidated when calling
+// an xml_params_*() function that takes a non-const xml_params parameter.
+extern struct xml_params *alloc_xml_params();
+extern void free_xml_params(struct xml_params *params);
+extern void xml_params_resize(struct xml_params *params, int count);
+extern void xml_params_add(struct xml_params *params, const char *key, const char *value);
+extern void xml_params_add_int(struct xml_params *params, const char *key, int value);
+extern int xml_params_count(const struct xml_params *params);
+extern const char *xml_params_get_key(const struct xml_params *params, int idx); // not stable
+extern const char *xml_params_get_value(const struct xml_params *params, int idx); // not stable
+extern void xml_params_set_value(struct xml_params *params, int idx, const char *value);
+extern const char **xml_params_get(const struct xml_params *params); // not stable
+
+#ifdef __cplusplus
+}
+#endif