summaryrefslogtreecommitdiff
path: root/usr/src/lib/libdemangle/common/cxx.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libdemangle/common/cxx.h')
-rw-r--r--usr/src/lib/libdemangle/common/cxx.h87
1 files changed, 87 insertions, 0 deletions
diff --git a/usr/src/lib/libdemangle/common/cxx.h b/usr/src/lib/libdemangle/common/cxx.h
new file mode 100644
index 0000000000..eab265d7e1
--- /dev/null
+++ b/usr/src/lib/libdemangle/common/cxx.h
@@ -0,0 +1,87 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source. A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright 2017 Jason King
+ */
+
+#ifndef _CPP_H
+#define _CPP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdio.h>
+#include "demangle-sys.h"
+#include "str.h"
+
+typedef struct name_s {
+ str_pair_t *nm_items;
+ sysdem_ops_t *nm_ops;
+ size_t nm_len;
+ size_t nm_size;
+} name_t;
+
+extern size_t cpp_name_max_depth;
+
+void name_clear(name_t *);
+void name_init(name_t *, sysdem_ops_t *);
+void name_fini(name_t *);
+size_t name_len(const name_t *);
+boolean_t name_empty(const name_t *);
+boolean_t name_add(name_t *, const char *, size_t, const char *, size_t);
+boolean_t name_add_str(name_t *, str_t *, str_t *);
+boolean_t name_join(name_t *, size_t, const char *);
+boolean_t name_fmt(name_t *, const char *, const char *);
+str_pair_t *name_at(const name_t *, size_t);
+str_pair_t *name_top(name_t *);
+void name_pop(name_t *, str_pair_t *);
+
+typedef struct sub_s {
+ name_t *sub_items;
+ sysdem_ops_t *sub_ops;
+ size_t sub_len;
+ size_t sub_size;
+} sub_t;
+
+void sub_clear(sub_t *);
+void sub_init(sub_t *, sysdem_ops_t *);
+void sub_fini(sub_t *);
+void sub_pop(sub_t *);
+boolean_t sub_save(sub_t *, const name_t *, size_t);
+boolean_t sub_substitute(const sub_t *, size_t, name_t *);
+boolean_t sub_empty(const sub_t *);
+size_t sub_len(const sub_t *);
+
+typedef struct templ_s {
+ sub_t *tpl_items;
+ sysdem_ops_t *tpl_ops;
+ size_t tpl_len;
+ size_t tpl_size;
+} templ_t;
+
+void templ_init(templ_t *, sysdem_ops_t *);
+void templ_fini(templ_t *);
+boolean_t templ_empty(const templ_t *);
+size_t templ_top_len(const templ_t *);
+boolean_t templ_sub(const templ_t *, size_t, name_t *);
+boolean_t templ_save(const name_t *, size_t, templ_t *);
+
+boolean_t templ_push(templ_t *);
+void templ_pop(templ_t *);
+sub_t *templ_top(templ_t *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CPP_H */