Return to hash.h CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / libxml2 / include / libxml |
1.1 ! misho 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__ */