xref: /dflybsd-src/contrib/gcc-4.7/include/dyn-string.h (revision 04febcfb30580676d3e95f58a16c5137ee478b32)
1*e4b17023SJohn Marino /* An abstract string datatype.
2*e4b17023SJohn Marino    Copyright (C) 1998, 1999, 2000, 2002, 2004, 2005, 2009
3*e4b17023SJohn Marino    Free Software Foundation, Inc.
4*e4b17023SJohn Marino    Contributed by Mark Mitchell (mark@markmitchell.com).
5*e4b17023SJohn Marino 
6*e4b17023SJohn Marino This file is part of GCC.
7*e4b17023SJohn Marino 
8*e4b17023SJohn Marino GCC is free software; you can redistribute it and/or modify
9*e4b17023SJohn Marino it under the terms of the GNU General Public License as published by
10*e4b17023SJohn Marino the Free Software Foundation; either version 2, or (at your option)
11*e4b17023SJohn Marino any later version.
12*e4b17023SJohn Marino 
13*e4b17023SJohn Marino GCC is distributed in the hope that it will be useful,
14*e4b17023SJohn Marino but WITHOUT ANY WARRANTY; without even the implied warranty of
15*e4b17023SJohn Marino MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*e4b17023SJohn Marino GNU General Public License for more details.
17*e4b17023SJohn Marino 
18*e4b17023SJohn Marino You should have received a copy of the GNU General Public License
19*e4b17023SJohn Marino along with GCC; see the file COPYING.  If not, write to
20*e4b17023SJohn Marino the Free Software Foundation, 51 Franklin Street - Fifth Floor,
21*e4b17023SJohn Marino Boston, MA 02110-1301, USA.  */
22*e4b17023SJohn Marino 
23*e4b17023SJohn Marino #ifndef DYN_STRING_H
24*e4b17023SJohn Marino #define DYN_STRING_H
25*e4b17023SJohn Marino 
26*e4b17023SJohn Marino #ifdef __cplusplus
27*e4b17023SJohn Marino extern "C" {
28*e4b17023SJohn Marino #endif
29*e4b17023SJohn Marino 
30*e4b17023SJohn Marino typedef struct dyn_string
31*e4b17023SJohn Marino {
32*e4b17023SJohn Marino   int allocated;	/* The amount of space allocated for the string.  */
33*e4b17023SJohn Marino   int length;		/* The actual length of the string.  */
34*e4b17023SJohn Marino   char *s;		/* The string itself, NUL-terminated.  */
35*e4b17023SJohn Marino }* dyn_string_t;
36*e4b17023SJohn Marino 
37*e4b17023SJohn Marino /* The length STR, in bytes, not including the terminating NUL.  */
38*e4b17023SJohn Marino #define dyn_string_length(STR)                                          \
39*e4b17023SJohn Marino   ((STR)->length)
40*e4b17023SJohn Marino 
41*e4b17023SJohn Marino /* The NTBS in which the contents of STR are stored.  */
42*e4b17023SJohn Marino #define dyn_string_buf(STR)                                             \
43*e4b17023SJohn Marino   ((STR)->s)
44*e4b17023SJohn Marino 
45*e4b17023SJohn Marino /* Compare DS1 to DS2 with strcmp.  */
46*e4b17023SJohn Marino #define dyn_string_compare(DS1, DS2)                                    \
47*e4b17023SJohn Marino   (strcmp ((DS1)->s, (DS2)->s))
48*e4b17023SJohn Marino 
49*e4b17023SJohn Marino 
50*e4b17023SJohn Marino extern int dyn_string_init (struct dyn_string *, int);
51*e4b17023SJohn Marino extern dyn_string_t dyn_string_new (int);
52*e4b17023SJohn Marino extern void dyn_string_delete (dyn_string_t);
53*e4b17023SJohn Marino extern char *dyn_string_release (dyn_string_t);
54*e4b17023SJohn Marino extern dyn_string_t dyn_string_resize (dyn_string_t, int);
55*e4b17023SJohn Marino extern void dyn_string_clear (dyn_string_t);
56*e4b17023SJohn Marino extern int dyn_string_copy (dyn_string_t, dyn_string_t);
57*e4b17023SJohn Marino extern int dyn_string_copy_cstr (dyn_string_t, const char *);
58*e4b17023SJohn Marino extern int dyn_string_prepend (dyn_string_t, dyn_string_t);
59*e4b17023SJohn Marino extern int dyn_string_prepend_cstr (dyn_string_t, const char *);
60*e4b17023SJohn Marino extern int dyn_string_insert (dyn_string_t, int, dyn_string_t);
61*e4b17023SJohn Marino extern int dyn_string_insert_cstr (dyn_string_t, int, const char *);
62*e4b17023SJohn Marino extern int dyn_string_insert_char (dyn_string_t, int, int);
63*e4b17023SJohn Marino extern int dyn_string_append (dyn_string_t, dyn_string_t);
64*e4b17023SJohn Marino extern int dyn_string_append_cstr (dyn_string_t, const char *);
65*e4b17023SJohn Marino extern int dyn_string_append_char (dyn_string_t, int);
66*e4b17023SJohn Marino extern int dyn_string_substring (dyn_string_t,  dyn_string_t, int, int);
67*e4b17023SJohn Marino extern int dyn_string_eq (dyn_string_t, dyn_string_t);
68*e4b17023SJohn Marino 
69*e4b17023SJohn Marino #ifdef __cplusplus
70*e4b17023SJohn Marino }
71*e4b17023SJohn Marino #endif
72*e4b17023SJohn Marino 
73*e4b17023SJohn Marino #endif /* !defined (DYN_STRING_H) */
74