Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233/* * 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__
#include <libxml/xmlversion.h>#include <libxml/dict.h>#include <libxml/xmlstring.h>
#ifdef __cplusplusextern "C" {#endif
/* * The hash table. */typedef struct _xmlHashTable xmlHashTable;typedef xmlHashTable *xmlHashTablePtr;
/* * 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, const 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, const xmlChar *name);/** * xmlHashScanner: * @payload: the data in the hash * @data: extra scanner data * @name: the name associated * * Callback when scanning data in a hash with the simple scanner. */typedef void (*xmlHashScanner)(void *payload, void *data, const xmlChar *name);/** * xmlHashScannerFull: * @payload: the data in the hash * @data: extra scanner 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 xmlHashCreate (int size);XMLPUBFUN xmlHashTablePtr xmlHashCreateDict (int size, xmlDictPtr dict);XMLPUBFUN void xmlHashFree (xmlHashTablePtr hash, xmlHashDeallocator dealloc);XMLPUBFUN void xmlHashDefaultDeallocator(void *entry, const xmlChar *name);
/* * Add a new entry to the hash table. */XMLPUBFUN int xmlHashAddEntry (xmlHashTablePtr hash, const xmlChar *name, void *userdata);XMLPUBFUN int xmlHashUpdateEntry (xmlHashTablePtr hash, const xmlChar *name, void *userdata, xmlHashDeallocator dealloc);XMLPUBFUN int xmlHashAddEntry2 (xmlHashTablePtr hash, const xmlChar *name, const xmlChar *name2, void *userdata);XMLPUBFUN int xmlHashUpdateEntry2 (xmlHashTablePtr hash, const xmlChar *name, const xmlChar *name2, void *userdata, xmlHashDeallocator dealloc);XMLPUBFUN int xmlHashAddEntry3 (xmlHashTablePtr hash, const xmlChar *name, const xmlChar *name2, const xmlChar *name3, void *userdata);XMLPUBFUN int xmlHashUpdateEntry3 (xmlHashTablePtr hash, const xmlChar *name, const xmlChar *name2, const xmlChar *name3, void *userdata, xmlHashDeallocator dealloc);
/* * Remove an entry from the hash table. */XMLPUBFUN int xmlHashRemoveEntry (xmlHashTablePtr hash, const xmlChar *name, xmlHashDeallocator dealloc);XMLPUBFUN int xmlHashRemoveEntry2 (xmlHashTablePtr hash, const xmlChar *name, const xmlChar *name2, xmlHashDeallocator dealloc);XMLPUBFUN int xmlHashRemoveEntry3 (xmlHashTablePtr hash, const xmlChar *name, const xmlChar *name2, const xmlChar *name3, xmlHashDeallocator dealloc);
/* * Retrieve the payload. */XMLPUBFUN void * xmlHashLookup (xmlHashTablePtr hash, const xmlChar *name);XMLPUBFUN void * xmlHashLookup2 (xmlHashTablePtr hash, const xmlChar *name, const xmlChar *name2);XMLPUBFUN void * xmlHashLookup3 (xmlHashTablePtr hash, const xmlChar *name, const xmlChar *name2, const xmlChar *name3);XMLPUBFUN void * xmlHashQLookup (xmlHashTablePtr hash, const xmlChar *prefix, const xmlChar *name);XMLPUBFUN void * xmlHashQLookup2 (xmlHashTablePtr hash, const xmlChar *prefix, const xmlChar *name, const xmlChar *prefix2, const xmlChar *name2);XMLPUBFUN void * xmlHashQLookup3 (xmlHashTablePtr hash, const xmlChar *prefix, const xmlChar *name, const xmlChar *prefix2, const xmlChar *name2, const xmlChar *prefix3, const xmlChar *name3);
/* * Helpers. */XMLPUBFUN xmlHashTablePtr xmlHashCopy (xmlHashTablePtr hash, xmlHashCopier copy);XMLPUBFUN int xmlHashSize (xmlHashTablePtr hash);XMLPUBFUN void xmlHashScan (xmlHashTablePtr hash, xmlHashScanner scan, void *data);XMLPUBFUN void xmlHashScan3 (xmlHashTablePtr hash, const xmlChar *name, const xmlChar *name2, const xmlChar *name3, xmlHashScanner scan, void *data);XMLPUBFUN void xmlHashScanFull (xmlHashTablePtr hash, xmlHashScannerFull scan, void *data);XMLPUBFUN void xmlHashScanFull3 (xmlHashTablePtr hash, const xmlChar *name, const xmlChar *name2, const xmlChar *name3, xmlHashScannerFull scan, void *data);#ifdef __cplusplus}#endif#endif /* ! __XML_HASH_H__ */