2 * Summary: Chained hash tables
3 * Description: This module implements the hash table support used in
4 * various places in the library.
6 * Copy: See Copyright for the status of this software.
8 * Author: Bjorn Reese <bjorn.reese@systematic.dk>
11 #ifndef __XML_HASH_H__
12 #define __XML_HASH_H__
21 typedef struct _xmlHashTable xmlHashTable;
22 typedef xmlHashTable *xmlHashTablePtr;
28 #include <libxml/xmlversion.h>
29 #include <libxml/parser.h>
30 #include <libxml/dict.h>
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.
45 * @fptr: pointer to a function
47 * Macro to do a casting from an object pointer to a
48 * function pointer without encountering a warning from
51 * #define XML_CAST_FPTR(fptr) (*(void **)(&fptr))
52 * This macro violated ISO C aliasing rules (gcc4 on s390 broke)
53 * so it is disabled now
56 #define XML_CAST_FPTR(fptr) fptr
64 * @payload: the data in the hash
65 * @name: the name associated
67 * Callback to free data from a hash.
69 typedef void (*xmlHashDeallocator)(void *payload, xmlChar *name);
72 * @payload: the data in the hash
73 * @name: the name associated
75 * Callback to copy data from a hash.
77 * Returns a copy of the data or NULL in case of error.
79 typedef void *(*xmlHashCopier)(void *payload, xmlChar *name);
82 * @payload: the data in the hash
83 * @data: extra scannner data
84 * @name: the name associated
86 * Callback when scanning data in a hash with the simple scanner.
88 typedef void (*xmlHashScanner)(void *payload, void *data, xmlChar *name);
91 * @payload: the data in the hash
92 * @data: extra scannner data
93 * @name: the name associated
94 * @name2: the second name associated
95 * @name3: the third name associated
97 * Callback when scanning data in a hash with the full scanner.
99 typedef void (*xmlHashScannerFull)(void *payload, void *data,
100 const xmlChar *name, const xmlChar *name2,
101 const xmlChar *name3);
104 * Constructor and destructor.
106 XMLPUBFUN xmlHashTablePtr XMLCALL
107 xmlHashCreate (int size);
108 XMLPUBFUN xmlHashTablePtr XMLCALL
109 xmlHashCreateDict(int size,
111 XMLPUBFUN void XMLCALL
112 xmlHashFree (xmlHashTablePtr table,
113 xmlHashDeallocator f);
116 * Add a new entry to the hash table.
118 XMLPUBFUN int XMLCALL
119 xmlHashAddEntry (xmlHashTablePtr table,
122 XMLPUBFUN int XMLCALL
123 xmlHashUpdateEntry(xmlHashTablePtr table,
126 xmlHashDeallocator f);
127 XMLPUBFUN int XMLCALL
128 xmlHashAddEntry2(xmlHashTablePtr table,
130 const xmlChar *name2,
132 XMLPUBFUN int XMLCALL
133 xmlHashUpdateEntry2(xmlHashTablePtr table,
135 const xmlChar *name2,
137 xmlHashDeallocator f);
138 XMLPUBFUN int XMLCALL
139 xmlHashAddEntry3(xmlHashTablePtr table,
141 const xmlChar *name2,
142 const xmlChar *name3,
144 XMLPUBFUN int XMLCALL
145 xmlHashUpdateEntry3(xmlHashTablePtr table,
147 const xmlChar *name2,
148 const xmlChar *name3,
150 xmlHashDeallocator f);
153 * Remove an entry from the hash table.
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);
167 * Retrieve the userdata.
169 XMLPUBFUN void * XMLCALL
170 xmlHashLookup (xmlHashTablePtr table,
171 const xmlChar *name);
172 XMLPUBFUN void * XMLCALL
173 xmlHashLookup2 (xmlHashTablePtr table,
175 const xmlChar *name2);
176 XMLPUBFUN void * XMLCALL
177 xmlHashLookup3 (xmlHashTablePtr table,
179 const xmlChar *name2,
180 const xmlChar *name3);
181 XMLPUBFUN void * XMLCALL
182 xmlHashQLookup (xmlHashTablePtr table,
184 const xmlChar *prefix);
185 XMLPUBFUN void * XMLCALL
186 xmlHashQLookup2 (xmlHashTablePtr table,
188 const xmlChar *prefix,
189 const xmlChar *name2,
190 const xmlChar *prefix2);
191 XMLPUBFUN void * XMLCALL
192 xmlHashQLookup3 (xmlHashTablePtr table,
194 const xmlChar *prefix,
195 const xmlChar *name2,
196 const xmlChar *prefix2,
197 const xmlChar *name3,
198 const xmlChar *prefix3);
203 XMLPUBFUN xmlHashTablePtr XMLCALL
204 xmlHashCopy (xmlHashTablePtr table,
206 XMLPUBFUN int XMLCALL
207 xmlHashSize (xmlHashTablePtr table);
208 XMLPUBFUN void XMLCALL
209 xmlHashScan (xmlHashTablePtr table,
212 XMLPUBFUN void XMLCALL
213 xmlHashScan3 (xmlHashTablePtr table,
215 const xmlChar *name2,
216 const xmlChar *name3,
219 XMLPUBFUN void XMLCALL
220 xmlHashScanFull (xmlHashTablePtr table,
221 xmlHashScannerFull f,
223 XMLPUBFUN void XMLCALL
224 xmlHashScanFull3(xmlHashTablePtr table,
226 const xmlChar *name2,
227 const xmlChar *name3,
228 xmlHashScannerFull f,
233 #endif /* ! __XML_HASH_H__ */