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