Imported Upstream version 0.19.7
[platform/upstream/gettext.git] / gnulib-local / lib / libxml / hash.in.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, 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, 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, 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
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__ */