diff options
Diffstat (limited to 'libsolv-0.4.0/src/strpool.h')
-rw-r--r-- | libsolv-0.4.0/src/strpool.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/libsolv-0.4.0/src/strpool.h b/libsolv-0.4.0/src/strpool.h new file mode 100644 index 0000000..c97b873 --- /dev/null +++ b/libsolv-0.4.0/src/strpool.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2007, Novell Inc. + * + * This program is licensed under the BSD license, read LICENSE.BSD + * for further information + */ +#ifndef LIBSOLV_STRINGPOOL_H +#define LIBSOLV_STRINGPOOL_H + +#include "pooltypes.h" +#include "hash.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define STRID_NULL 0 +#define STRID_EMPTY 1 + +struct _Stringpool +{ + Offset *strings; /* table of offsets into stringspace, indexed by Id: Id -> Offset */ + int nstrings; /* number of ids in strings table */ + char *stringspace; /* space for all unique strings: stringspace + Offset = string */ + Offset sstrings; /* size of used stringspace */ + + Hashtable stringhashtbl; /* hash table: (string ->) Hash -> Id */ + Hashval stringhashmask; /* modulo value for hash table (size of table - 1) */ +}; + +void stringpool_init(Stringpool *ss, const char *strs[]); +void stringpool_init_empty(Stringpool *ss); +void stringpool_clone(Stringpool *ss, Stringpool *from); +void stringpool_free(Stringpool *ss); +void stringpool_freehash(Stringpool *ss); + +Id stringpool_str2id(Stringpool *ss, const char *str, int create); +Id stringpool_strn2id(Stringpool *ss, const char *str, unsigned int len, int create); + +void stringpool_shrink(Stringpool *ss); + + +static inline const char * +stringpool_id2str(Stringpool *ss, Id id) +{ + return ss->stringspace + ss->strings[id]; +} + +#ifdef __cplusplus +} +#endif + +#endif |