xref: /haiku/src/libs/libsolv/solv/strpool.h (revision caed67a8cba83913b9c21ac2b06ebc6bd1cb3111)
1 /*
2  * Copyright (c) 2007, Novell Inc.
3  *
4  * This program is licensed under the BSD license, read LICENSE.BSD
5  * for further information
6  */
7 #ifndef LIBSOLV_STRINGPOOL_H
8 #define LIBSOLV_STRINGPOOL_H
9 
10 #include "pooltypes.h"
11 #include "hash.h"
12 
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16 
17 #define STRID_NULL  0
18 #define STRID_EMPTY 1
19 
20 struct _Stringpool
21 {
22   Offset *strings;            /* table of offsets into stringspace, indexed by Id: Id -> Offset */
23   int nstrings;               /* number of ids in strings table */
24   char *stringspace;          /* space for all unique strings: stringspace + Offset = string */
25   Offset sstrings;            /* size of used stringspace */
26 
27   Hashtable stringhashtbl;    /* hash table: (string ->) Hash -> Id */
28   Hashval stringhashmask;     /* modulo value for hash table (size of table - 1) */
29 };
30 
31 void stringpool_init(Stringpool *ss, const char *strs[]);
32 void stringpool_init_empty(Stringpool *ss);
33 void stringpool_clone(Stringpool *ss, Stringpool *from);
34 void stringpool_free(Stringpool *ss);
35 void stringpool_freehash(Stringpool *ss);
36 
37 Id stringpool_str2id(Stringpool *ss, const char *str, int create);
38 Id stringpool_strn2id(Stringpool *ss, const char *str, unsigned int len, int create);
39 
40 void stringpool_shrink(Stringpool *ss);
41 
42 
43 static inline const char *
44 stringpool_id2str(Stringpool *ss, Id id)
45 {
46   return ss->stringspace + ss->strings[id];
47 }
48 
49 #ifdef __cplusplus
50 }
51 #endif
52 
53 #endif
54