imgtools/imgcheck/libxml/hash.h
changeset 2 39c28ec933dd
equal deleted inserted replaced
1:820b22e13ff1 2:39c28ec933dd
       
     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 change
       
    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__ */