Annotation of embedaddon/libxml2/include/libxml/hash.h, revision 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>