/ libxml2 / include / libxml / hash.h
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, 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__ */