1 /*
   2  * This file and its contents are supplied under the terms of the
   3  * Common Development and Distribution License ("CDDL"), version 1.0.
   4  * You may only use this file in accordance with the terms of version
   5  * 1.0 of the CDDL.
   6  *
   7  * A full copy of the text of the CDDL should have accompanied this
   8  * source.  A copy of the CDDL is also available via the Internet at
   9  * http://www.illumos.org/license/CDDL.
  10  */
  11 
  12 /*
  13  * Copyright 2017 Jason King
  14  */
  15 
  16 #ifndef _STR_H
  17 #define _STR_H
  18 
  19 #include <sys/types.h>
  20 #include "sysdemangle.h"
  21 #include "sysdemangle_int.h"
  22 
  23 #ifdef __cplusplus
  24 extern "C" {
  25 #endif
  26 
  27 struct sysdem_alloc_s;
  28 
  29 typedef struct str_s {
  30         char            *str_s;
  31         sysdem_ops_t    *str_ops;
  32         size_t          str_len;
  33         size_t          str_size;
  34 } str_t;
  35 
  36 typedef struct str_pair_s {
  37         str_t   strp_l;
  38         str_t   strp_r;
  39 } str_pair_t;
  40 
  41 void str_init(str_t *restrict, sysdem_ops_t *);
  42 void str_fini(str_t *);
  43 size_t str_length(const str_t *);
  44 boolean_t str_copy(const str_t *, str_t *);
  45 void str_set(str_t *, const char *, size_t);
  46 boolean_t str_append(str_t *, const char *, size_t);
  47 boolean_t str_append_str(str_t *, const str_t *);
  48 boolean_t str_append_c(str_t *, int);
  49 boolean_t str_insert(str_t *, size_t, const char *, size_t);
  50 boolean_t str_insert_str(str_t *, size_t, const str_t *);
  51 boolean_t str_erase(str_t *, size_t, size_t);
  52 
  53 str_pair_t *str_pair_init(str_pair_t *, sysdem_ops_t *);
  54 void str_pair_fini(str_pair_t *);
  55 boolean_t str_pair_merge(str_pair_t *);
  56 boolean_t str_pair_copy(const str_pair_t *, str_pair_t *);
  57 size_t str_pair_len(const str_pair_t *);
  58 
  59 #ifdef __cplusplus
  60 }
  61 #endif
  62 
  63 #endif /* _STR_H */