diff options
Diffstat (limited to 'usr/src/lib/libdemangle/common/cxx.h')
-rw-r--r-- | usr/src/lib/libdemangle/common/cxx.h | 87 |
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 */ |