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 */ 88