1169695Skan/* An abstract string datatype. 2169695Skan Copyright (C) 1998, 1999, 2000, 2002, 2004 Free Software Foundation, Inc. 3169695Skan Contributed by Mark Mitchell (mark@markmitchell.com). 4169695Skan 5169695SkanThis file is part of GCC. 6169695Skan 7169695SkanGCC is free software; you can redistribute it and/or modify 8169695Skanit under the terms of the GNU General Public License as published by 9169695Skanthe Free Software Foundation; either version 2, or (at your option) 10169695Skanany later version. 11169695Skan 12169695SkanGCC is distributed in the hope that it will be useful, 13169695Skanbut WITHOUT ANY WARRANTY; without even the implied warranty of 14169695SkanMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15169695SkanGNU General Public License for more details. 16169695Skan 17169695SkanYou should have received a copy of the GNU General Public License 18169695Skanalong with GCC; see the file COPYING. If not, write to 19169695Skanthe Free Software Foundation, 51 Franklin Street - Fifth Floor, 20169695SkanBoston, MA 02110-1301, USA. */ 21169695Skan 22169695Skan 23169695Skantypedef struct dyn_string 24169695Skan{ 25169695Skan int allocated; /* The amount of space allocated for the string. */ 26169695Skan int length; /* The actual length of the string. */ 27169695Skan char *s; /* The string itself, NUL-terminated. */ 28169695Skan}* dyn_string_t; 29169695Skan 30169695Skan/* The length STR, in bytes, not including the terminating NUL. */ 31169695Skan#define dyn_string_length(STR) \ 32169695Skan ((STR)->length) 33169695Skan 34169695Skan/* The NTBS in which the contents of STR are stored. */ 35169695Skan#define dyn_string_buf(STR) \ 36169695Skan ((STR)->s) 37169695Skan 38169695Skan/* Compare DS1 to DS2 with strcmp. */ 39169695Skan#define dyn_string_compare(DS1, DS2) \ 40169695Skan (strcmp ((DS1)->s, (DS2)->s)) 41169695Skan 42169695Skan 43169695Skanextern int dyn_string_init (struct dyn_string *, int); 44169695Skanextern dyn_string_t dyn_string_new (int); 45169695Skanextern void dyn_string_delete (dyn_string_t); 46169695Skanextern char *dyn_string_release (dyn_string_t); 47169695Skanextern dyn_string_t dyn_string_resize (dyn_string_t, int); 48169695Skanextern void dyn_string_clear (dyn_string_t); 49169695Skanextern int dyn_string_copy (dyn_string_t, dyn_string_t); 50169695Skanextern int dyn_string_copy_cstr (dyn_string_t, const char *); 51169695Skanextern int dyn_string_prepend (dyn_string_t, dyn_string_t); 52169695Skanextern int dyn_string_prepend_cstr (dyn_string_t, const char *); 53169695Skanextern int dyn_string_insert (dyn_string_t, int, dyn_string_t); 54169695Skanextern int dyn_string_insert_cstr (dyn_string_t, int, const char *); 55169695Skanextern int dyn_string_insert_char (dyn_string_t, int, int); 56169695Skanextern int dyn_string_append (dyn_string_t, dyn_string_t); 57169695Skanextern int dyn_string_append_cstr (dyn_string_t, const char *); 58169695Skanextern int dyn_string_append_char (dyn_string_t, int); 59169695Skanextern int dyn_string_substring (dyn_string_t, dyn_string_t, int, int); 60169695Skanextern int dyn_string_eq (dyn_string_t, dyn_string_t); 61