(root)/
gettext-0.22.4/
libtextstyle/
lib/
libxml/
hash.in.h
       1  /* libxml2 - Library for parsing XML documents
       2   * Copyright (C) 2006-2019 Free Software Foundation, Inc.
       3   *
       4   * This file is not part of the GNU gettext program, but is used with
       5   * GNU gettext.
       6   *
       7   * The original copyright notice is as follows:
       8   */
       9  
      10  /*
      11   * Copyright (C) 1998-2012 Daniel Veillard.  All Rights Reserved.
      12   *
      13   * Permission is hereby granted, free of charge, to any person obtaining a copy
      14   * of this software and associated documentation files (the "Software"), to deal
      15   * in the Software without restriction, including without limitation the rights
      16   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      17   * copies of the Software, and to permit persons to whom the Software is fur-
      18   * nished to do so, subject to the following conditions:
      19   *
      20   * The above copyright notice and this permission notice shall be included in
      21   * all copies or substantial portions of the Software.
      22   *
      23   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      24   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
      25   * NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
      26   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      27   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      28   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
      29   * THE SOFTWARE.
      30   *
      31   * Author: Bjorn Reese <bjorn.reese@systematic.dk>
      32   */
      33  
      34  /*
      35   * Summary: Chained hash tables
      36   * Description: This module implements the hash table support used in
      37   *		various places in the library.
      38   */
      39  
      40  #ifndef __XML_HASH_H__
      41  #define __XML_HASH_H__
      42  
      43  #ifdef __cplusplus
      44  extern "C" {
      45  #endif
      46  
      47  /*
      48   * The hash table.
      49   */
      50  typedef struct _xmlHashTable xmlHashTable;
      51  typedef xmlHashTable *xmlHashTablePtr;
      52  
      53  #ifdef __cplusplus
      54  }
      55  #endif
      56  
      57  #include <libxml/xmlversion.h>
      58  #include <libxml/parser.h>
      59  #include <libxml/dict.h>
      60  
      61  #ifdef __cplusplus
      62  extern "C" {
      63  #endif
      64  
      65  /*
      66   * Recent version of gcc produce a warning when a function pointer is assigned
      67   * to an object pointer, or vice versa.  The following macro is a dirty hack
      68   * to allow suppression of the warning.  If your architecture has function
      69   * pointers which are a different size than a void pointer, there may be some
      70   * serious trouble within the library.
      71   */
      72  /**
      73   * XML_CAST_FPTR:
      74   * @fptr:  pointer to a function
      75   *
      76   * Macro to do a casting from an object pointer to a
      77   * function pointer without encountering a warning from
      78   * gcc
      79   *
      80   * #define XML_CAST_FPTR(fptr) (*(void **)(&fptr))
      81   * This macro violated ISO C aliasing rules (gcc4 on s390 broke)
      82   * so it is disabled now
      83   */
      84  
      85  #define XML_CAST_FPTR(fptr) fptr
      86  
      87  
      88  /*
      89   * function types:
      90   */
      91  /**
      92   * xmlHashDeallocator:
      93   * @payload:  the data in the hash
      94   * @name:  the name associated
      95   *
      96   * Callback to free data from a hash.
      97   */
      98  typedef void (*xmlHashDeallocator)(void *payload, const xmlChar *name);
      99  /**
     100   * xmlHashCopier:
     101   * @payload:  the data in the hash
     102   * @name:  the name associated
     103   *
     104   * Callback to copy data from a hash.
     105   *
     106   * Returns a copy of the data or NULL in case of error.
     107   */
     108  typedef void *(*xmlHashCopier)(void *payload, const xmlChar *name);
     109  /**
     110   * xmlHashScanner:
     111   * @payload:  the data in the hash
     112   * @data:  extra scannner data
     113   * @name:  the name associated
     114   *
     115   * Callback when scanning data in a hash with the simple scanner.
     116   */
     117  typedef void (*xmlHashScanner)(void *payload, void *data, const xmlChar *name);
     118  /**
     119   * xmlHashScannerFull:
     120   * @payload:  the data in the hash
     121   * @data:  extra scannner data
     122   * @name:  the name associated
     123   * @name2:  the second name associated
     124   * @name3:  the third name associated
     125   *
     126   * Callback when scanning data in a hash with the full scanner.
     127   */
     128  typedef void (*xmlHashScannerFull)(void *payload, void *data,
     129  				   const xmlChar *name, const xmlChar *name2,
     130  				   const xmlChar *name3);
     131  
     132  /*
     133   * Constructor and destructor.
     134   */
     135  XMLPUBFUN xmlHashTablePtr XMLCALL
     136  			xmlHashCreate	(int size);
     137  XMLPUBFUN xmlHashTablePtr XMLCALL
     138  			xmlHashCreateDict(int size,
     139  					 xmlDictPtr dict);
     140  XMLPUBFUN void XMLCALL
     141  			xmlHashFree	(xmlHashTablePtr table,
     142  					 xmlHashDeallocator f);
     143  XMLPUBFUN void XMLCALL
     144  			xmlHashDefaultDeallocator(void *entry,
     145  					 const xmlChar *name);
     146  
     147  /*
     148   * Add a new entry to the hash table.
     149   */
     150  XMLPUBFUN int XMLCALL
     151  			xmlHashAddEntry	(xmlHashTablePtr table,
     152  		                         const xmlChar *name,
     153  		                         void *userdata);
     154  XMLPUBFUN int XMLCALL
     155  			xmlHashUpdateEntry(xmlHashTablePtr table,
     156  		                         const xmlChar *name,
     157  		                         void *userdata,
     158  					 xmlHashDeallocator f);
     159  XMLPUBFUN int XMLCALL
     160  			xmlHashAddEntry2(xmlHashTablePtr table,
     161  		                         const xmlChar *name,
     162  		                         const xmlChar *name2,
     163  		                         void *userdata);
     164  XMLPUBFUN int XMLCALL
     165  			xmlHashUpdateEntry2(xmlHashTablePtr table,
     166  		                         const xmlChar *name,
     167  		                         const xmlChar *name2,
     168  		                         void *userdata,
     169  					 xmlHashDeallocator f);
     170  XMLPUBFUN int XMLCALL
     171  			xmlHashAddEntry3(xmlHashTablePtr table,
     172  		                         const xmlChar *name,
     173  		                         const xmlChar *name2,
     174  		                         const xmlChar *name3,
     175  		                         void *userdata);
     176  XMLPUBFUN int XMLCALL
     177  			xmlHashUpdateEntry3(xmlHashTablePtr table,
     178  		                         const xmlChar *name,
     179  		                         const xmlChar *name2,
     180  		                         const xmlChar *name3,
     181  		                         void *userdata,
     182  					 xmlHashDeallocator f);
     183  
     184  /*
     185   * Remove an entry from the hash table.
     186   */
     187  XMLPUBFUN int XMLCALL
     188  			xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name,
     189                             xmlHashDeallocator f);
     190  XMLPUBFUN int XMLCALL
     191  			xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name,
     192                              const xmlChar *name2, xmlHashDeallocator f);
     193  XMLPUBFUN int  XMLCALL
     194  			xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name,
     195                              const xmlChar *name2, const xmlChar *name3,
     196                              xmlHashDeallocator f);
     197  
     198  /*
     199   * Retrieve the userdata.
     200   */
     201  XMLPUBFUN void * XMLCALL
     202  			xmlHashLookup	(xmlHashTablePtr table,
     203  					 const xmlChar *name);
     204  XMLPUBFUN void * XMLCALL
     205  			xmlHashLookup2	(xmlHashTablePtr table,
     206  					 const xmlChar *name,
     207  					 const xmlChar *name2);
     208  XMLPUBFUN void * XMLCALL
     209  			xmlHashLookup3	(xmlHashTablePtr table,
     210  					 const xmlChar *name,
     211  					 const xmlChar *name2,
     212  					 const xmlChar *name3);
     213  XMLPUBFUN void * XMLCALL
     214  			xmlHashQLookup	(xmlHashTablePtr table,
     215  					 const xmlChar *name,
     216  					 const xmlChar *prefix);
     217  XMLPUBFUN void * XMLCALL
     218  			xmlHashQLookup2	(xmlHashTablePtr table,
     219  					 const xmlChar *name,
     220  					 const xmlChar *prefix,
     221  					 const xmlChar *name2,
     222  					 const xmlChar *prefix2);
     223  XMLPUBFUN void * XMLCALL
     224  			xmlHashQLookup3	(xmlHashTablePtr table,
     225  					 const xmlChar *name,
     226  					 const xmlChar *prefix,
     227  					 const xmlChar *name2,
     228  					 const xmlChar *prefix2,
     229  					 const xmlChar *name3,
     230  					 const xmlChar *prefix3);
     231  
     232  /*
     233   * Helpers.
     234   */
     235  XMLPUBFUN xmlHashTablePtr XMLCALL
     236  			xmlHashCopy	(xmlHashTablePtr table,
     237  					 xmlHashCopier f);
     238  XMLPUBFUN int XMLCALL
     239  			xmlHashSize	(xmlHashTablePtr table);
     240  XMLPUBFUN void XMLCALL
     241  			xmlHashScan	(xmlHashTablePtr table,
     242  					 xmlHashScanner f,
     243  					 void *data);
     244  XMLPUBFUN void XMLCALL
     245  			xmlHashScan3	(xmlHashTablePtr table,
     246  					 const xmlChar *name,
     247  					 const xmlChar *name2,
     248  					 const xmlChar *name3,
     249  					 xmlHashScanner f,
     250  					 void *data);
     251  XMLPUBFUN void XMLCALL
     252  			xmlHashScanFull	(xmlHashTablePtr table,
     253  					 xmlHashScannerFull f,
     254  					 void *data);
     255  XMLPUBFUN void XMLCALL
     256  			xmlHashScanFull3(xmlHashTablePtr table,
     257  					 const xmlChar *name,
     258  					 const xmlChar *name2,
     259  					 const xmlChar *name3,
     260  					 xmlHashScannerFull f,
     261  					 void *data);
     262  #ifdef __cplusplus
     263  }
     264  #endif
     265  #endif /* ! __XML_HASH_H__ */