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

1.1       misho       1: /*
                      2:  * Summary: Chained hash tables
1.1.1.2 ! misho       3:  * Description: This module implements the hash table support used in
        !             4:  *             various places in the library.
1.1       misho       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);
1.1.1.2 ! misho     111: XMLPUBFUN void XMLCALL
1.1       misho     112:                        xmlHashFree     (xmlHashTablePtr table,
                    113:                                         xmlHashDeallocator f);
                    114: 
                    115: /*
                    116:  * Add a new entry to the hash table.
                    117:  */
1.1.1.2 ! misho     118: XMLPUBFUN int XMLCALL
1.1       misho     119:                        xmlHashAddEntry (xmlHashTablePtr table,
                    120:                                         const xmlChar *name,
                    121:                                         void *userdata);
1.1.1.2 ! misho     122: XMLPUBFUN int XMLCALL
1.1       misho     123:                        xmlHashUpdateEntry(xmlHashTablePtr table,
                    124:                                         const xmlChar *name,
                    125:                                         void *userdata,
                    126:                                         xmlHashDeallocator f);
1.1.1.2 ! misho     127: XMLPUBFUN int XMLCALL
1.1       misho     128:                        xmlHashAddEntry2(xmlHashTablePtr table,
                    129:                                         const xmlChar *name,
                    130:                                         const xmlChar *name2,
                    131:                                         void *userdata);
1.1.1.2 ! misho     132: XMLPUBFUN int XMLCALL
1.1       misho     133:                        xmlHashUpdateEntry2(xmlHashTablePtr table,
                    134:                                         const xmlChar *name,
                    135:                                         const xmlChar *name2,
                    136:                                         void *userdata,
                    137:                                         xmlHashDeallocator f);
1.1.1.2 ! misho     138: XMLPUBFUN int XMLCALL
1.1       misho     139:                        xmlHashAddEntry3(xmlHashTablePtr table,
                    140:                                         const xmlChar *name,
                    141:                                         const xmlChar *name2,
                    142:                                         const xmlChar *name3,
                    143:                                         void *userdata);
1.1.1.2 ! misho     144: XMLPUBFUN int XMLCALL
1.1       misho     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:  */
1.1.1.2 ! misho     155: XMLPUBFUN int XMLCALL
1.1       misho     156:                        xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name,
                    157:                            xmlHashDeallocator f);
1.1.1.2 ! misho     158: XMLPUBFUN int XMLCALL
1.1       misho     159:                        xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name,
                    160:                             const xmlChar *name2, xmlHashDeallocator f);
1.1.1.2 ! misho     161: XMLPUBFUN int  XMLCALL
1.1       misho     162:                        xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name,
                    163:                             const xmlChar *name2, const xmlChar *name3,
                    164:                             xmlHashDeallocator f);
                    165: 
                    166: /*
                    167:  * Retrieve the userdata.
                    168:  */
1.1.1.2 ! misho     169: XMLPUBFUN void * XMLCALL
1.1       misho     170:                        xmlHashLookup   (xmlHashTablePtr table,
                    171:                                         const xmlChar *name);
1.1.1.2 ! misho     172: XMLPUBFUN void * XMLCALL
1.1       misho     173:                        xmlHashLookup2  (xmlHashTablePtr table,
                    174:                                         const xmlChar *name,
                    175:                                         const xmlChar *name2);
1.1.1.2 ! misho     176: XMLPUBFUN void * XMLCALL
1.1       misho     177:                        xmlHashLookup3  (xmlHashTablePtr table,
                    178:                                         const xmlChar *name,
                    179:                                         const xmlChar *name2,
                    180:                                         const xmlChar *name3);
1.1.1.2 ! misho     181: XMLPUBFUN void * XMLCALL
1.1       misho     182:                        xmlHashQLookup  (xmlHashTablePtr table,
                    183:                                         const xmlChar *name,
                    184:                                         const xmlChar *prefix);
1.1.1.2 ! misho     185: XMLPUBFUN void * XMLCALL
1.1       misho     186:                        xmlHashQLookup2 (xmlHashTablePtr table,
                    187:                                         const xmlChar *name,
                    188:                                         const xmlChar *prefix,
                    189:                                         const xmlChar *name2,
                    190:                                         const xmlChar *prefix2);
1.1.1.2 ! misho     191: XMLPUBFUN void * XMLCALL
1.1       misho     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:  */
1.1.1.2 ! misho     203: XMLPUBFUN xmlHashTablePtr XMLCALL
1.1       misho     204:                        xmlHashCopy     (xmlHashTablePtr table,
                    205:                                         xmlHashCopier f);
1.1.1.2 ! misho     206: XMLPUBFUN int XMLCALL
1.1       misho     207:                        xmlHashSize     (xmlHashTablePtr table);
1.1.1.2 ! misho     208: XMLPUBFUN void XMLCALL
1.1       misho     209:                        xmlHashScan     (xmlHashTablePtr table,
                    210:                                         xmlHashScanner f,
                    211:                                         void *data);
1.1.1.2 ! misho     212: XMLPUBFUN void XMLCALL
1.1       misho     213:                        xmlHashScan3    (xmlHashTablePtr table,
                    214:                                         const xmlChar *name,
                    215:                                         const xmlChar *name2,
                    216:                                         const xmlChar *name3,
                    217:                                         xmlHashScanner f,
                    218:                                         void *data);
1.1.1.2 ! misho     219: XMLPUBFUN void XMLCALL
1.1       misho     220:                        xmlHashScanFull (xmlHashTablePtr table,
                    221:                                         xmlHashScannerFull f,
                    222:                                         void *data);
1.1.1.2 ! misho     223: XMLPUBFUN void XMLCALL
1.1       misho     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>