[LIBXML2] Update to version 2.9.8. CORE-15280
[reactos.git] / sdk / include / reactos / libs / libxml / 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 */
43 /**
44 * XML_CAST_FPTR:
45 * @fptr: pointer to a function
46 *
47 * Macro to do a casting from an object pointer to a
48 * function pointer without encountering a warning from
49 * gcc
50 *
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
54 */
55
56 #define XML_CAST_FPTR(fptr) fptr
57
58
59 /*
60 * function types:
61 */
62 /**
63 * xmlHashDeallocator:
64 * @payload: the data in the hash
65 * @name: the name associated
66 *
67 * Callback to free data from a hash.
68 */
69 typedef void (*xmlHashDeallocator)(void *payload, const xmlChar *name);
70 /**
71 * xmlHashCopier:
72 * @payload: the data in the hash
73 * @name: the name associated
74 *
75 * Callback to copy data from a hash.
76 *
77 * Returns a copy of the data or NULL in case of error.
78 */
79 typedef void *(*xmlHashCopier)(void *payload, const xmlChar *name);
80 /**
81 * xmlHashScanner:
82 * @payload: the data in the hash
83 * @data: extra scannner data
84 * @name: the name associated
85 *
86 * Callback when scanning data in a hash with the simple scanner.
87 */
88 typedef void (*xmlHashScanner)(void *payload, void *data, const xmlChar *name);
89 /**
90 * xmlHashScannerFull:
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
96 *
97 * Callback when scanning data in a hash with the full scanner.
98 */
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 XMLPUBFUN void XMLCALL
115 xmlHashDefaultDeallocator(void *entry,
116 const xmlChar *name);
117
118 /*
119 * Add a new entry to the hash table.
120 */
121 XMLPUBFUN int XMLCALL
122 xmlHashAddEntry (xmlHashTablePtr table,
123 const xmlChar *name,
124 void *userdata);
125 XMLPUBFUN int XMLCALL
126 xmlHashUpdateEntry(xmlHashTablePtr table,
127 const xmlChar *name,
128 void *userdata,
129 xmlHashDeallocator f);
130 XMLPUBFUN int XMLCALL
131 xmlHashAddEntry2(xmlHashTablePtr table,
132 const xmlChar *name,
133 const xmlChar *name2,
134 void *userdata);
135 XMLPUBFUN int XMLCALL
136 xmlHashUpdateEntry2(xmlHashTablePtr table,
137 const xmlChar *name,
138 const xmlChar *name2,
139 void *userdata,
140 xmlHashDeallocator f);
141 XMLPUBFUN int XMLCALL
142 xmlHashAddEntry3(xmlHashTablePtr table,
143 const xmlChar *name,
144 const xmlChar *name2,
145 const xmlChar *name3,
146 void *userdata);
147 XMLPUBFUN int XMLCALL
148 xmlHashUpdateEntry3(xmlHashTablePtr table,
149 const xmlChar *name,
150 const xmlChar *name2,
151 const xmlChar *name3,
152 void *userdata,
153 xmlHashDeallocator f);
154
155 /*
156 * Remove an entry from the hash table.
157 */
158 XMLPUBFUN int XMLCALL
159 xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name,
160 xmlHashDeallocator f);
161 XMLPUBFUN int XMLCALL
162 xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name,
163 const xmlChar *name2, xmlHashDeallocator f);
164 XMLPUBFUN int XMLCALL
165 xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name,
166 const xmlChar *name2, const xmlChar *name3,
167 xmlHashDeallocator f);
168
169 /*
170 * Retrieve the userdata.
171 */
172 XMLPUBFUN void * XMLCALL
173 xmlHashLookup (xmlHashTablePtr table,
174 const xmlChar *name);
175 XMLPUBFUN void * XMLCALL
176 xmlHashLookup2 (xmlHashTablePtr table,
177 const xmlChar *name,
178 const xmlChar *name2);
179 XMLPUBFUN void * XMLCALL
180 xmlHashLookup3 (xmlHashTablePtr table,
181 const xmlChar *name,
182 const xmlChar *name2,
183 const xmlChar *name3);
184 XMLPUBFUN void * XMLCALL
185 xmlHashQLookup (xmlHashTablePtr table,
186 const xmlChar *name,
187 const xmlChar *prefix);
188 XMLPUBFUN void * XMLCALL
189 xmlHashQLookup2 (xmlHashTablePtr table,
190 const xmlChar *name,
191 const xmlChar *prefix,
192 const xmlChar *name2,
193 const xmlChar *prefix2);
194 XMLPUBFUN void * XMLCALL
195 xmlHashQLookup3 (xmlHashTablePtr table,
196 const xmlChar *name,
197 const xmlChar *prefix,
198 const xmlChar *name2,
199 const xmlChar *prefix2,
200 const xmlChar *name3,
201 const xmlChar *prefix3);
202
203 /*
204 * Helpers.
205 */
206 XMLPUBFUN xmlHashTablePtr XMLCALL
207 xmlHashCopy (xmlHashTablePtr table,
208 xmlHashCopier f);
209 XMLPUBFUN int XMLCALL
210 xmlHashSize (xmlHashTablePtr table);
211 XMLPUBFUN void XMLCALL
212 xmlHashScan (xmlHashTablePtr table,
213 xmlHashScanner f,
214 void *data);
215 XMLPUBFUN void XMLCALL
216 xmlHashScan3 (xmlHashTablePtr table,
217 const xmlChar *name,
218 const xmlChar *name2,
219 const xmlChar *name3,
220 xmlHashScanner f,
221 void *data);
222 XMLPUBFUN void XMLCALL
223 xmlHashScanFull (xmlHashTablePtr table,
224 xmlHashScannerFull f,
225 void *data);
226 XMLPUBFUN void XMLCALL
227 xmlHashScanFull3(xmlHashTablePtr table,
228 const xmlChar *name,
229 const xmlChar *name2,
230 const xmlChar *name3,
231 xmlHashScannerFull f,
232 void *data);
233 #ifdef __cplusplus
234 }
235 #endif
236 #endif /* ! __XML_HASH_H__ */