1 /* 2 * This file is part of DGD, https://github.com/dworkin/dgd 3 * Copyright (C) 1993-2010 Dworkin B.V. 4 * Copyright (C) 2010 DGD Authors (see the commit log for details) 5 * 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU Affero General Public License as 8 * published by the Free Software Foundation, either version 3 of the 9 * License, or (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU Affero General Public License for more details. 15 * 16 * You should have received a copy of the GNU Affero General Public License 17 * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 struct _string_ { 21 struct _strref_ *primary; /* primary reference */ 22 Uint ref; /* number of references + const bit */ 23 ssizet len; /* string length */ 24 char text[1]; /* actual characters following this struct */ 25 }; 26 27 extern string *str_alloc (char*, long); 28 extern string *str_new (char*, long); 29 # define str_ref(s) ((s)->ref++) 30 extern void str_del (string*); 31 32 extern void str_merge (void); 33 extern Uint str_put (string*, Uint); 34 extern void str_clear (void); 35 36 extern int str_cmp (string*, string*); 37 extern string *str_add (string*, string*); 38 extern ssizet str_index (string*, long); 39 extern void str_ckrange (string*, long, long); 40 extern string *str_range (string*, long, long); 41