11debfc3dSmrg /* An abstract string datatype. 2*8feb0f0bSmrg Copyright (C) 1998-2020 Free Software Foundation, Inc. 31debfc3dSmrg Contributed by Mark Mitchell (mark@markmitchell.com). 41debfc3dSmrg 51debfc3dSmrg This file is part of GCC. 61debfc3dSmrg 71debfc3dSmrg GCC is free software; you can redistribute it and/or modify 81debfc3dSmrg it under the terms of the GNU General Public License as published by 91debfc3dSmrg the Free Software Foundation; either version 2, or (at your option) 101debfc3dSmrg any later version. 111debfc3dSmrg 121debfc3dSmrg GCC is distributed in the hope that it will be useful, 131debfc3dSmrg but WITHOUT ANY WARRANTY; without even the implied warranty of 141debfc3dSmrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 151debfc3dSmrg GNU General Public License for more details. 161debfc3dSmrg 171debfc3dSmrg You should have received a copy of the GNU General Public License 181debfc3dSmrg along with GCC; see the file COPYING. If not, write to 191debfc3dSmrg the Free Software Foundation, 51 Franklin Street - Fifth Floor, 201debfc3dSmrg Boston, MA 02110-1301, USA. */ 211debfc3dSmrg 221debfc3dSmrg #ifndef DYN_STRING_H 231debfc3dSmrg #define DYN_STRING_H 241debfc3dSmrg 251debfc3dSmrg #ifdef __cplusplus 261debfc3dSmrg extern "C" { 271debfc3dSmrg #endif 281debfc3dSmrg 291debfc3dSmrg typedef struct dyn_string 301debfc3dSmrg { 311debfc3dSmrg int allocated; /* The amount of space allocated for the string. */ 321debfc3dSmrg int length; /* The actual length of the string. */ 331debfc3dSmrg char *s; /* The string itself, NUL-terminated. */ 341debfc3dSmrg }* dyn_string_t; 351debfc3dSmrg 361debfc3dSmrg /* The length STR, in bytes, not including the terminating NUL. */ 371debfc3dSmrg #define dyn_string_length(STR) \ 381debfc3dSmrg ((STR)->length) 391debfc3dSmrg 401debfc3dSmrg /* The NTBS in which the contents of STR are stored. */ 411debfc3dSmrg #define dyn_string_buf(STR) \ 421debfc3dSmrg ((STR)->s) 431debfc3dSmrg 441debfc3dSmrg /* Compare DS1 to DS2 with strcmp. */ 451debfc3dSmrg #define dyn_string_compare(DS1, DS2) \ 461debfc3dSmrg (strcmp ((DS1)->s, (DS2)->s)) 471debfc3dSmrg 481debfc3dSmrg 491debfc3dSmrg extern int dyn_string_init (struct dyn_string *, int); 501debfc3dSmrg extern dyn_string_t dyn_string_new (int); 511debfc3dSmrg extern void dyn_string_delete (dyn_string_t); 521debfc3dSmrg extern char *dyn_string_release (dyn_string_t); 531debfc3dSmrg extern dyn_string_t dyn_string_resize (dyn_string_t, int); 541debfc3dSmrg extern void dyn_string_clear (dyn_string_t); 551debfc3dSmrg extern int dyn_string_copy (dyn_string_t, dyn_string_t); 561debfc3dSmrg extern int dyn_string_copy_cstr (dyn_string_t, const char *); 571debfc3dSmrg extern int dyn_string_prepend (dyn_string_t, dyn_string_t); 581debfc3dSmrg extern int dyn_string_prepend_cstr (dyn_string_t, const char *); 591debfc3dSmrg extern int dyn_string_insert (dyn_string_t, int, dyn_string_t); 601debfc3dSmrg extern int dyn_string_insert_cstr (dyn_string_t, int, const char *); 611debfc3dSmrg extern int dyn_string_insert_char (dyn_string_t, int, int); 621debfc3dSmrg extern int dyn_string_append (dyn_string_t, dyn_string_t); 631debfc3dSmrg extern int dyn_string_append_cstr (dyn_string_t, const char *); 641debfc3dSmrg extern int dyn_string_append_char (dyn_string_t, int); 651debfc3dSmrg extern int dyn_string_substring (dyn_string_t, dyn_string_t, int, int); 661debfc3dSmrg extern int dyn_string_eq (dyn_string_t, dyn_string_t); 671debfc3dSmrg 681debfc3dSmrg #ifdef __cplusplus 691debfc3dSmrg } 701debfc3dSmrg #endif 711debfc3dSmrg 721debfc3dSmrg #endif /* !defined (DYN_STRING_H) */ 73