1/*****************************************************************************/
2/* */
3/* strpool.h */
4/* */
5/* A string pool */
6/* */
7/* */
8/* */
9/* (C) 2003-2008 Ullrich von Bassewitz */
10/* Roemerstrasse 52 */
11/* D-70794 Filderstadt */
12/* EMail: uz@cc65.org */
13/* */
14/* */
15/* This software is provided 'as-is', without any expressed or implied */
16/* warranty. In no event will the authors be held liable for any damages */
17/* arising from the use of this software. */
18/* */
19/* Permission is granted to anyone to use this software for any purpose, */
20/* including commercial applications, and to alter it and redistribute it */
21/* freely, subject to the following restrictions: */
22/* */
23/* 1. The origin of this software must not be misrepresented; you must not */
24/* claim that you wrote the original software. If you use this software */
25/* in a product, an acknowledgment in the product documentation would be */
26/* appreciated but is not required. */
27/* 2. Altered source versions must be plainly marked as such, and must not */
28/* be misrepresented as being the original software. */
29/* 3. This notice may not be removed or altered from any source */
30/* distribution. */
31/* */
32/*****************************************************************************/
33
34
35
36/* A string pool is used to store identifiers and other strings. Each string
37** stored in the pool has a unique ID, which may be used to access the string
38** in the pool. Identical strings are only stored once in the pool and have
39** identical IDs. This means that instead of comparing strings, just the
40** string pool IDs must be compared.
41*/
42
43
44
45#ifndef STRPOOL_H
46#define STRPOOL_H
47
48
49
50/* common */
51#include "hashtab.h"
52#include "strbuf.h"
53
54
55
56/*****************************************************************************/
57/* Data */
58/*****************************************************************************/
59
60
61
62/* Opaque string pool entry */
63typedef struct StringPoolEntry StringPoolEntry;
64
65/* A string pool */
66typedef struct StringPool StringPool;
67
68
69
70/*****************************************************************************/
71/* Code */
72/*****************************************************************************/
73
74
75
76StringPool* NewStringPool (unsigned HashSlots);
77/* Allocate, initialize and return a new string pool */
78
79void FreeStringPool (StringPool* P);
80/* Free a string pool */
81
82const StrBuf* SP_Get (const StringPool* P, unsigned Index);
83/* Return a string from the pool. Index must exist, otherwise FAIL is called. */
84
85unsigned SP_Add (StringPool* P, const StrBuf* S);
86/* Add a string buffer to the buffer and return the index. If the string does
87** already exist in the pool, SP_AddBuf will just return the index of the
88** existing string.
89*/
90
91unsigned SP_AddStr (StringPool* P, const char* S);
92/* Add a string to the buffer and return the index. If the string does already
93** exist in the pool, SP_Add will just return the index of the existing string.
94*/
95
96unsigned SP_GetCount (const StringPool* P);
97/* Return the number of strings in the pool */
98
99
100
101/* End of strpool.h */
102
103#endif
104