1*4226f635SJason King /*
2*4226f635SJason King  * This file and its contents are supplied under the terms of the
3*4226f635SJason King  * Common Development and Distribution License ("CDDL"), version 1.0.
4*4226f635SJason King  * You may only use this file in accordance with the terms of version
5*4226f635SJason King  * 1.0 of the CDDL.
6*4226f635SJason King  *
7*4226f635SJason King  * A full copy of the text of the CDDL should have accompanied this
8*4226f635SJason King  * source.  A copy of the CDDL is also available via the Internet at
9*4226f635SJason King  * http://www.illumos.org/license/CDDL.
10*4226f635SJason King  */
11*4226f635SJason King 
12*4226f635SJason King /*
13*4226f635SJason King  * Copyright 2017 Jason King
14*4226f635SJason King  */
15*4226f635SJason King 
16*4226f635SJason King #ifndef _CPP_H
17*4226f635SJason King #define	_CPP_H
18*4226f635SJason King 
19*4226f635SJason King #ifdef __cplusplus
20*4226f635SJason King extern "C" {
21*4226f635SJason King #endif
22*4226f635SJason King 
23*4226f635SJason King #include <stdio.h>
24*4226f635SJason King #include "demangle-sys.h"
25*4226f635SJason King #include "str.h"
26*4226f635SJason King 
27*4226f635SJason King typedef struct name_s {
28*4226f635SJason King 	str_pair_t	*nm_items;
29*4226f635SJason King 	sysdem_ops_t	*nm_ops;
30*4226f635SJason King 	size_t		nm_len;
31*4226f635SJason King 	size_t		nm_size;
32*4226f635SJason King } name_t;
33*4226f635SJason King 
34*4226f635SJason King extern size_t cpp_name_max_depth;
35*4226f635SJason King 
36*4226f635SJason King void name_clear(name_t *);
37*4226f635SJason King void name_init(name_t *, sysdem_ops_t *);
38*4226f635SJason King void name_fini(name_t *);
39*4226f635SJason King size_t name_len(const name_t *);
40*4226f635SJason King boolean_t name_empty(const name_t *);
41*4226f635SJason King boolean_t name_add(name_t *, const char *, size_t, const char *, size_t);
42*4226f635SJason King boolean_t name_add_str(name_t *, str_t *, str_t *);
43*4226f635SJason King boolean_t name_join(name_t *, size_t, const char *);
44*4226f635SJason King boolean_t name_fmt(name_t *, const char *, const char *);
45*4226f635SJason King str_pair_t *name_at(const name_t *, size_t);
46*4226f635SJason King str_pair_t *name_top(name_t *);
47*4226f635SJason King void name_pop(name_t *, str_pair_t *);
48*4226f635SJason King 
49*4226f635SJason King typedef struct sub_s {
50*4226f635SJason King 	name_t		*sub_items;
51*4226f635SJason King 	sysdem_ops_t	*sub_ops;
52*4226f635SJason King 	size_t		sub_len;
53*4226f635SJason King 	size_t		sub_size;
54*4226f635SJason King } sub_t;
55*4226f635SJason King 
56*4226f635SJason King void sub_clear(sub_t *);
57*4226f635SJason King void sub_init(sub_t *, sysdem_ops_t *);
58*4226f635SJason King void sub_fini(sub_t *);
59*4226f635SJason King void sub_pop(sub_t *);
60*4226f635SJason King boolean_t sub_save(sub_t *, const name_t *, size_t);
61*4226f635SJason King boolean_t sub_substitute(const sub_t *, size_t, name_t *);
62*4226f635SJason King boolean_t sub_empty(const sub_t *);
63*4226f635SJason King size_t sub_len(const sub_t *);
64*4226f635SJason King 
65*4226f635SJason King typedef struct templ_s {
66*4226f635SJason King 	sub_t		*tpl_items;
67*4226f635SJason King 	sysdem_ops_t	*tpl_ops;
68*4226f635SJason King 	size_t		tpl_len;
69*4226f635SJason King 	size_t		tpl_size;
70*4226f635SJason King } templ_t;
71*4226f635SJason King 
72*4226f635SJason King void templ_init(templ_t *, sysdem_ops_t *);
73*4226f635SJason King void templ_fini(templ_t *);
74*4226f635SJason King boolean_t templ_empty(const templ_t *);
75*4226f635SJason King size_t templ_top_len(const templ_t *);
76*4226f635SJason King boolean_t templ_sub(const templ_t *, size_t, name_t *);
77*4226f635SJason King boolean_t templ_save(const name_t *, size_t, templ_t *);
78*4226f635SJason King 
79*4226f635SJason King boolean_t templ_push(templ_t *);
80*4226f635SJason King void templ_pop(templ_t *);
81*4226f635SJason King sub_t *templ_top(templ_t *);
82*4226f635SJason King 
83*4226f635SJason King #ifdef __cplusplus
84*4226f635SJason King }
85*4226f635SJason King #endif
86*4226f635SJason King 
87*4226f635SJason King #endif /* _CPP_H */