LTKCPP-- LLRP Toolkit C Plus Plus Library
hash.h
1 /*
2  * Summary: Chained hash tables
3  * Description: This module implements the hash table support used in
4  * various places in the library.
5  *
6  * Copy: See Copyright for the status of this software.
7  *
8  * Author: Bjorn Reese <bjorn.reese@systematic.dk>
9  */
10 
11 #ifndef __XML_HASH_H__
12 #define __XML_HASH_H__
13 
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17 
18 /*
19  * The hash table.
20  */
21 typedef struct _xmlHashTable xmlHashTable;
22 typedef xmlHashTable *xmlHashTablePtr;
23 
24 #ifdef __cplusplus
25 }
26 #endif
27 
28 #include <libxml/xmlversion.h>
29 #include <libxml/parser.h>
30 #include <libxml/dict.h>
31 
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35 
36 /*
37  * Recent version of gcc produce a warning when a function pointer is assigned
38  * to an object pointer, or vice versa. The following macro is a dirty hack
39  * to allow suppression of the warning. If your architecture has function
40  * pointers which are a different size than a void pointer, there may be some
41  * serious trouble within the library.
42  */
56 #define XML_CAST_FPTR(fptr) fptr
57 
58 
59 /*
60  * function types:
61  */
69 typedef void (*xmlHashDeallocator)(void *payload, xmlChar *name);
79 typedef void *(*xmlHashCopier)(void *payload, xmlChar *name);
88 typedef void (*xmlHashScanner)(void *payload, void *data, xmlChar *name);
99 typedef void (*xmlHashScannerFull)(void *payload, void *data,
100  const xmlChar *name, const xmlChar *name2,
101  const xmlChar *name3);
102 
103 /*
104  * Constructor and destructor.
105  */
106 XMLPUBFUN xmlHashTablePtr XMLCALL
107  xmlHashCreate (int size);
108 XMLPUBFUN xmlHashTablePtr XMLCALL
109  xmlHashCreateDict(int size,
110  xmlDictPtr dict);
111 XMLPUBFUN void XMLCALL
112  xmlHashFree (xmlHashTablePtr table,
113  xmlHashDeallocator f);
114 
115 /*
116  * Add a new entry to the hash table.
117  */
118 XMLPUBFUN int XMLCALL
119  xmlHashAddEntry (xmlHashTablePtr table,
120  const xmlChar *name,
121  void *userdata);
122 XMLPUBFUN int XMLCALL
123  xmlHashUpdateEntry(xmlHashTablePtr table,
124  const xmlChar *name,
125  void *userdata,
126  xmlHashDeallocator f);
127 XMLPUBFUN int XMLCALL
128  xmlHashAddEntry2(xmlHashTablePtr table,
129  const xmlChar *name,
130  const xmlChar *name2,
131  void *userdata);
132 XMLPUBFUN int XMLCALL
133  xmlHashUpdateEntry2(xmlHashTablePtr table,
134  const xmlChar *name,
135  const xmlChar *name2,
136  void *userdata,
137  xmlHashDeallocator f);
138 XMLPUBFUN int XMLCALL
139  xmlHashAddEntry3(xmlHashTablePtr table,
140  const xmlChar *name,
141  const xmlChar *name2,
142  const xmlChar *name3,
143  void *userdata);
144 XMLPUBFUN int XMLCALL
145  xmlHashUpdateEntry3(xmlHashTablePtr table,
146  const xmlChar *name,
147  const xmlChar *name2,
148  const xmlChar *name3,
149  void *userdata,
150  xmlHashDeallocator f);
151 
152 /*
153  * Remove an entry from the hash table.
154  */
155 XMLPUBFUN int XMLCALL
156  xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name,
157  xmlHashDeallocator f);
158 XMLPUBFUN int XMLCALL
159  xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name,
160  const xmlChar *name2, xmlHashDeallocator f);
161 XMLPUBFUN int XMLCALL
162  xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name,
163  const xmlChar *name2, const xmlChar *name3,
164  xmlHashDeallocator f);
165 
166 /*
167  * Retrieve the userdata.
168  */
169 XMLPUBFUN void * XMLCALL
170  xmlHashLookup (xmlHashTablePtr table,
171  const xmlChar *name);
172 XMLPUBFUN void * XMLCALL
173  xmlHashLookup2 (xmlHashTablePtr table,
174  const xmlChar *name,
175  const xmlChar *name2);
176 XMLPUBFUN void * XMLCALL
177  xmlHashLookup3 (xmlHashTablePtr table,
178  const xmlChar *name,
179  const xmlChar *name2,
180  const xmlChar *name3);
181 XMLPUBFUN void * XMLCALL
182  xmlHashQLookup (xmlHashTablePtr table,
183  const xmlChar *name,
184  const xmlChar *prefix);
185 XMLPUBFUN void * XMLCALL
186  xmlHashQLookup2 (xmlHashTablePtr table,
187  const xmlChar *name,
188  const xmlChar *prefix,
189  const xmlChar *name2,
190  const xmlChar *prefix2);
191 XMLPUBFUN void * XMLCALL
192  xmlHashQLookup3 (xmlHashTablePtr table,
193  const xmlChar *name,
194  const xmlChar *prefix,
195  const xmlChar *name2,
196  const xmlChar *prefix2,
197  const xmlChar *name3,
198  const xmlChar *prefix3);
199 
200 /*
201  * Helpers.
202  */
203 XMLPUBFUN xmlHashTablePtr XMLCALL
204  xmlHashCopy (xmlHashTablePtr table,
205  xmlHashCopier f);
206 XMLPUBFUN int XMLCALL
207  xmlHashSize (xmlHashTablePtr table);
208 XMLPUBFUN void XMLCALL
209  xmlHashScan (xmlHashTablePtr table,
210  xmlHashScanner f,
211  void *data);
212 XMLPUBFUN void XMLCALL
213  xmlHashScan3 (xmlHashTablePtr table,
214  const xmlChar *name,
215  const xmlChar *name2,
216  const xmlChar *name3,
217  xmlHashScanner f,
218  void *data);
219 XMLPUBFUN void XMLCALL
220  xmlHashScanFull (xmlHashTablePtr table,
221  xmlHashScannerFull f,
222  void *data);
223 XMLPUBFUN void XMLCALL
224  xmlHashScanFull3(xmlHashTablePtr table,
225  const xmlChar *name,
226  const xmlChar *name2,
227  const xmlChar *name3,
228  xmlHashScannerFull f,
229  void *data);
230 #ifdef __cplusplus
231 }
232 #endif
233 #endif /* ! __XML_HASH_H__ */