File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libxml2 / include / libxml / hash.h
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Sun Jun 15 19:53:38 2014 UTC (10 years, 2 months ago) by misho
Branches: libxml2, MAIN
CVS tags: v2_9_1p0, v2_9_1, HEAD
libxml2 2.9.1

    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>