williamr@4: /* williamr@4: * Summary: chained hash tables williamr@4: * description: this module implement the hash table support used in williamr@4: * various place in the library. williamr@4: * williamr@4: * Copy: See Copyright for the status of this software. williamr@4: * williamr@4: * Author: Bjorn Reese williamr@4: * Portion Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. williamr@4: */ williamr@4: williamr@4: /** @file williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: williamr@4: #ifndef XML_HASH_H williamr@4: #define XML_HASH_H williamr@4: williamr@4: #include williamr@4: williamr@4: #ifdef __cplusplus williamr@4: extern "C" { williamr@4: #endif williamr@4: williamr@4: /* williamr@4: * The hash table. williamr@4: */ williamr@4: typedef struct _xmlHashTable xmlHashTable; williamr@4: typedef xmlHashTable* xmlHashTablePtr; williamr@4: williamr@4: #ifdef __cplusplus williamr@4: } williamr@4: #endif williamr@4: #ifdef __cplusplus williamr@4: extern "C" { williamr@4: #endif williamr@4: williamr@4: /* williamr@4: * function types: williamr@4: */ williamr@4: /** williamr@4: * xmlHashDeallocator: williamr@4: * @param payload the data in the hash williamr@4: * @param name the name associated williamr@4: * williamr@4: * Callback to free data from a hash. williamr@4: */ williamr@4: typedef void (*xmlHashDeallocator)(void *payload, xmlChar *name); williamr@4: /** williamr@4: * xmlHashCopier: williamr@4: * @param payload the data in the hash williamr@4: * @param name the name associated williamr@4: * williamr@4: * Callback to copy data from a hash. williamr@4: * williamr@4: * Returns a copy of the data or NULL in case of error. williamr@4: */ williamr@4: typedef void *(*xmlHashCopier)(void *payload, xmlChar *name); williamr@4: /** williamr@4: * xmlHashScanner: williamr@4: * @param payload the data in the hash williamr@4: * @param data extra scannner data williamr@4: * @param name the name associated williamr@4: * williamr@4: * Callback when scanning data in a hash with the simple scanner. williamr@4: */ williamr@4: typedef void (*xmlHashScanner)(void *payload, void *data, xmlChar *name); williamr@4: /** williamr@4: * xmlHashScannerFull: williamr@4: * @param payload the data in the hash williamr@4: * @param data extra scannner data williamr@4: * @param name the name associated williamr@4: * @param name2 the second name associated williamr@4: * @param name3 the third name associated williamr@4: * williamr@4: * Callback when scanning data in a hash with the full scanner. williamr@4: */ williamr@4: typedef void (*xmlHashScannerFull)(void *payload, void *data, williamr@4: const xmlChar *name, const xmlChar *name2, williamr@4: const xmlChar *name3); williamr@4: williamr@4: /* williamr@4: * Constructor and destructor. williamr@4: */ williamr@4: XMLPUBFUN xmlHashTablePtr XMLCALL williamr@4: xmlHashCreate (int size); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlHashFree (xmlHashTablePtr table, williamr@4: xmlHashDeallocator f); williamr@4: williamr@4: williamr@4: /* williamr@4: * Add a new entry to the hash table. williamr@4: */ williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlHashAddEntry (xmlHashTablePtr table, williamr@4: const xmlChar *name, williamr@4: void *userdata); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlHashUpdateEntry(xmlHashTablePtr table, williamr@4: const xmlChar *name, williamr@4: void *userdata, williamr@4: xmlHashDeallocator f); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlHashAddEntry2(xmlHashTablePtr table, williamr@4: const xmlChar *name, williamr@4: const xmlChar *name2, williamr@4: void *userdata); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlHashUpdateEntry2(xmlHashTablePtr table, williamr@4: const xmlChar *name, williamr@4: const xmlChar *name2, williamr@4: void *userdata, williamr@4: xmlHashDeallocator f); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlHashAddEntry3(xmlHashTablePtr table, williamr@4: const xmlChar *name, williamr@4: const xmlChar *name2, williamr@4: const xmlChar *name3, williamr@4: void *userdata); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlHashUpdateEntry3(xmlHashTablePtr table, williamr@4: const xmlChar *name, williamr@4: const xmlChar *name2, williamr@4: const xmlChar *name3, williamr@4: void *userdata, williamr@4: xmlHashDeallocator f); williamr@4: williamr@4: /* williamr@4: * Remove an entry from the hash table. williamr@4: */ williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name, williamr@4: xmlHashDeallocator f); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name, williamr@4: const xmlChar *name2, xmlHashDeallocator f); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name, williamr@4: const xmlChar *name2, const xmlChar *name3, williamr@4: xmlHashDeallocator f); williamr@4: williamr@4: /* williamr@4: * Retrieve the userdata. williamr@4: */ williamr@4: XMLPUBFUN void * XMLCALL williamr@4: xmlHashLookup (xmlHashTablePtr table, williamr@4: const xmlChar *name); williamr@4: XMLPUBFUN void * XMLCALL williamr@4: xmlHashLookup2 (xmlHashTablePtr table, williamr@4: const xmlChar *name, williamr@4: const xmlChar *name2); williamr@4: XMLPUBFUN void * XMLCALL williamr@4: xmlHashLookup3 (xmlHashTablePtr table, williamr@4: const xmlChar *name, williamr@4: const xmlChar *name2, williamr@4: const xmlChar *name3); williamr@4: williamr@4: #ifndef XMLENGINE_EXCLUDE_UNUSED williamr@4: XMLPUBFUN void * XMLCALL williamr@4: xmlHashQLookup (xmlHashTablePtr table, williamr@4: const xmlChar *name, williamr@4: const xmlChar *prefix); williamr@4: #endif /* ifndef XMLENGINE_EXCLUDE_UNUSED */ williamr@4: williamr@4: XMLPUBFUN void * XMLCALL williamr@4: xmlHashQLookup2 (xmlHashTablePtr table, williamr@4: const xmlChar *name, williamr@4: const xmlChar *prefix, williamr@4: const xmlChar *name2, williamr@4: const xmlChar *prefix2); williamr@4: XMLPUBFUN void * XMLCALL williamr@4: xmlHashQLookup3 (xmlHashTablePtr table, williamr@4: const xmlChar *name, williamr@4: const xmlChar *prefix, williamr@4: const xmlChar *name2, williamr@4: const xmlChar *prefix2, williamr@4: const xmlChar *name3, williamr@4: const xmlChar *prefix3); williamr@4: williamr@4: /* williamr@4: * Helpers. williamr@4: */ williamr@4: XMLPUBFUN xmlHashTablePtr XMLCALL williamr@4: xmlHashCopy (xmlHashTablePtr table, williamr@4: xmlHashCopier f); williamr@4: williamr@4: #ifndef XMLENGINE_EXCLUDE_UNUSED williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlHashSize (xmlHashTablePtr table); williamr@4: #endif /* ifndef XMLENGINE_EXCLUDE_UNUSED */ williamr@4: williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlHashScan (xmlHashTablePtr table, williamr@4: xmlHashScanner f, williamr@4: void *data); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlHashScan3 (xmlHashTablePtr table, williamr@4: const xmlChar *name, williamr@4: const xmlChar *name2, williamr@4: const xmlChar *name3, williamr@4: xmlHashScanner f, williamr@4: void *data); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlHashScanFull (xmlHashTablePtr table, williamr@4: xmlHashScannerFull f, williamr@4: void *data); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlHashScanFull3(xmlHashTablePtr table, williamr@4: const xmlChar *name, williamr@4: const xmlChar *name2, williamr@4: const xmlChar *name3, williamr@4: xmlHashScannerFull f, williamr@4: void *data); williamr@4: #ifdef __cplusplus williamr@4: } williamr@4: #endif williamr@4: #endif /* XML_HASH_H */ williamr@4: