doubango/thirdparties/common/include/libxml/hash.h
c732d49e
 /*
  * Summary: Chained hash tables
  * Description: This module implements the hash table support used in
  *		various places in the library.
  *
  * Copy: See Copyright for the status of this software.
  *
  * Author: Bjorn Reese <bjorn.reese@systematic.dk>
  */
 
 #ifndef __XML_HASH_H__
 #define __XML_HASH_H__
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 /*
  * The hash table.
  */
 typedef struct _xmlHashTable xmlHashTable;
 typedef xmlHashTable *xmlHashTablePtr;
 
 #ifdef __cplusplus
 }
 #endif
 
 #include <libxml/xmlversion.h>
 #include <libxml/parser.h>
 #include <libxml/dict.h>
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 /*
  * Recent version of gcc produce a warning when a function pointer is assigned
  * to an object pointer, or vice versa.  The following macro is a dirty hack
  * to allow suppression of the warning.  If your architecture has function
  * pointers which are a different size than a void pointer, there may be some
  * serious trouble within the library.
  */
 /**
  * XML_CAST_FPTR:
  * @fptr:  pointer to a function
  *
  * Macro to do a casting from an object pointer to a
  * function pointer without encountering a warning from
  * gcc
  *
  * #define XML_CAST_FPTR(fptr) (*(void **)(&fptr))
  * This macro violated ISO C aliasing rules (gcc4 on s390 broke)
  * so it is disabled now
  */
 
 #define XML_CAST_FPTR(fptr) fptr
 
 
 /*
  * function types:
  */
 /**
  * xmlHashDeallocator:
  * @payload:  the data in the hash
  * @name:  the name associated
  *
  * Callback to free data from a hash.
  */
 typedef void (*xmlHashDeallocator)(void *payload, xmlChar *name);
 /**
  * xmlHashCopier:
  * @payload:  the data in the hash
  * @name:  the name associated
  *
  * Callback to copy data from a hash.
  *
  * Returns a copy of the data or NULL in case of error.
  */
 typedef void *(*xmlHashCopier)(void *payload, xmlChar *name);
 /**
  * xmlHashScanner:
  * @payload:  the data in the hash
  * @data:  extra scannner data
  * @name:  the name associated
  *
  * Callback when scanning data in a hash with the simple scanner.
  */
 typedef void (*xmlHashScanner)(void *payload, void *data, xmlChar *name);
 /**
  * xmlHashScannerFull:
  * @payload:  the data in the hash
  * @data:  extra scannner data
  * @name:  the name associated
  * @name2:  the second name associated
  * @name3:  the third name associated
  *
  * Callback when scanning data in a hash with the full scanner.
  */
 typedef void (*xmlHashScannerFull)(void *payload, void *data,
 				   const xmlChar *name, const xmlChar *name2,
 				   const xmlChar *name3);
 
 /*
  * Constructor and destructor.
  */
 XMLPUBFUN xmlHashTablePtr XMLCALL
 			xmlHashCreate	(int size);
 XMLPUBFUN xmlHashTablePtr XMLCALL
 			xmlHashCreateDict(int size,
 					 xmlDictPtr dict);
 XMLPUBFUN void XMLCALL
 			xmlHashFree	(xmlHashTablePtr table,
 					 xmlHashDeallocator f);
 
 /*
  * Add a new entry to the hash table.
  */
 XMLPUBFUN int XMLCALL
 			xmlHashAddEntry	(xmlHashTablePtr table,
 		                         const xmlChar *name,
 		                         void *userdata);
 XMLPUBFUN int XMLCALL
 			xmlHashUpdateEntry(xmlHashTablePtr table,
 		                         const xmlChar *name,
 		                         void *userdata,
 					 xmlHashDeallocator f);
 XMLPUBFUN int XMLCALL
 			xmlHashAddEntry2(xmlHashTablePtr table,
 		                         const xmlChar *name,
 		                         const xmlChar *name2,
 		                         void *userdata);
 XMLPUBFUN int XMLCALL
 			xmlHashUpdateEntry2(xmlHashTablePtr table,
 		                         const xmlChar *name,
 		                         const xmlChar *name2,
 		                         void *userdata,
 					 xmlHashDeallocator f);
 XMLPUBFUN int XMLCALL
 			xmlHashAddEntry3(xmlHashTablePtr table,
 		                         const xmlChar *name,
 		                         const xmlChar *name2,
 		                         const xmlChar *name3,
 		                         void *userdata);
 XMLPUBFUN int XMLCALL
 			xmlHashUpdateEntry3(xmlHashTablePtr table,
 		                         const xmlChar *name,
 		                         const xmlChar *name2,
 		                         const xmlChar *name3,
 		                         void *userdata,
 					 xmlHashDeallocator f);
 
 /*
  * Remove an entry from the hash table.
  */
 XMLPUBFUN int XMLCALL
 			xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name,
                            xmlHashDeallocator f);
 XMLPUBFUN int XMLCALL
 			xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name,
                             const xmlChar *name2, xmlHashDeallocator f);
 XMLPUBFUN int  XMLCALL
 			xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name,
                             const xmlChar *name2, const xmlChar *name3,
                             xmlHashDeallocator f);
 
 /*
  * Retrieve the userdata.
  */
 XMLPUBFUN void * XMLCALL
 			xmlHashLookup	(xmlHashTablePtr table,
 					 const xmlChar *name);
 XMLPUBFUN void * XMLCALL
 			xmlHashLookup2	(xmlHashTablePtr table,
 					 const xmlChar *name,
 					 const xmlChar *name2);
 XMLPUBFUN void * XMLCALL
 			xmlHashLookup3	(xmlHashTablePtr table,
 					 const xmlChar *name,
 					 const xmlChar *name2,
 					 const xmlChar *name3);
 XMLPUBFUN void * XMLCALL
 			xmlHashQLookup	(xmlHashTablePtr table,
 					 const xmlChar *name,
 					 const xmlChar *prefix);
 XMLPUBFUN void * XMLCALL
 			xmlHashQLookup2	(xmlHashTablePtr table,
 					 const xmlChar *name,
 					 const xmlChar *prefix,
 					 const xmlChar *name2,
 					 const xmlChar *prefix2);
 XMLPUBFUN void * XMLCALL
 			xmlHashQLookup3	(xmlHashTablePtr table,
 					 const xmlChar *name,
 					 const xmlChar *prefix,
 					 const xmlChar *name2,
 					 const xmlChar *prefix2,
 					 const xmlChar *name3,
 					 const xmlChar *prefix3);
 
 /*
  * Helpers.
  */
 XMLPUBFUN xmlHashTablePtr XMLCALL
 			xmlHashCopy	(xmlHashTablePtr table,
 					 xmlHashCopier f);
 XMLPUBFUN int XMLCALL
 			xmlHashSize	(xmlHashTablePtr table);
 XMLPUBFUN void XMLCALL
 			xmlHashScan	(xmlHashTablePtr table,
 					 xmlHashScanner f,
 					 void *data);
 XMLPUBFUN void XMLCALL
 			xmlHashScan3	(xmlHashTablePtr table,
 					 const xmlChar *name,
 					 const xmlChar *name2,
 					 const xmlChar *name3,
 					 xmlHashScanner f,
 					 void *data);
 XMLPUBFUN void XMLCALL
 			xmlHashScanFull	(xmlHashTablePtr table,
 					 xmlHashScannerFull f,
 					 void *data);
 XMLPUBFUN void XMLCALL
 			xmlHashScanFull3(xmlHashTablePtr table,
 					 const xmlChar *name,
 					 const xmlChar *name2,
 					 const xmlChar *name3,
 					 xmlHashScannerFull f,
 					 void *data);
 #ifdef __cplusplus
 }
 #endif
 #endif /* ! __XML_HASH_H__ */