Annotation of embedaddon/libxml2/include/libxml/hash.h, revision 1.1.1.1

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__ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>