# ## Module hash from libxml2

API Menu
Main Menu Developer Menu Code Examples API Menu Parser API Tree API Reader API XML Guidelines ChangeLog
API Indexes
Alphabetic Constructors Functions/Types Modules Symbols
Related links
Mail archive XSLT libxslt DOM gdome2 XML-DSig xmlsec FTP Windows binaries Solaris binaries MacOsX binaries lxml Python bindings Perl bindings C++ bindings PHP bindings Pascal bindings Ruby bindings Tcl bindings Bug Tracker
This module implements the hash table support used in various places in the library. ## Table of Contents
    #define XML_CAST_FPTR
    Structure xmlHashTable
    struct _xmlHashTable
    The content of this structure is not made public by the API.
    Typedef xmlHashTable * xmlHashTablePtr
    int	xmlHashAddEntry			(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 void * userdata)
    int	xmlHashAddEntry2		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 void * userdata)
    int	xmlHashAddEntry3		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 const xmlChar * name3,
    					 void * userdata)
    Function type: xmlHashCopier
    void *	xmlHashCopier			(void * payload,
    					 const xmlChar * name)
    xmlHashTablePtr	xmlHashCopy		(xmlHashTablePtr table,
    					 xmlHashCopier f)
    xmlHashTablePtr	xmlHashCreate		(int size)
    xmlHashTablePtr	xmlHashCreateDict	(int size,
    					 xmlDictPtr dict)
    Function type: xmlHashDeallocator
    void	xmlHashDeallocator		(void * payload,
    					 const xmlChar * name)
    void	xmlHashDefaultDeallocator	(void * entry,
    					 const xmlChar * name)
    void	xmlHashFree			(xmlHashTablePtr table,
    					 xmlHashDeallocator f)
    void *	xmlHashLookup			(xmlHashTablePtr table,
    					 const xmlChar * name)
    void *	xmlHashLookup2			(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2)
    void *	xmlHashLookup3			(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 const xmlChar * name3)
    void *	xmlHashQLookup			(xmlHashTablePtr table,
    					 const xmlChar * prefix,
    					 const xmlChar * name)
    void *	xmlHashQLookup2			(xmlHashTablePtr table,
    					 const xmlChar * prefix,
    					 const xmlChar * name,
    					 const xmlChar * prefix2,
    					 const xmlChar * name2)
    void *	xmlHashQLookup3			(xmlHashTablePtr table,
    					 const xmlChar * prefix,
    					 const xmlChar * name,
    					 const xmlChar * prefix2,
    					 const xmlChar * name2,
    					 const xmlChar * prefix3,
    					 const xmlChar * name3)
    int	xmlHashRemoveEntry		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 xmlHashDeallocator f)
    int	xmlHashRemoveEntry2		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 xmlHashDeallocator f)
    int	xmlHashRemoveEntry3		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 const xmlChar * name3,
    					 xmlHashDeallocator f)
    void	xmlHashScan			(xmlHashTablePtr table,
    					 xmlHashScanner f,
    					 void * data)
    void	xmlHashScan3			(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 const xmlChar * name3,
    					 xmlHashScanner f,
    					 void * data)
    void	xmlHashScanFull			(xmlHashTablePtr table,
    					 xmlHashScannerFull f,
    					 void * data)
    void	xmlHashScanFull3		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 const xmlChar * name3,
    					 xmlHashScannerFull f,
    					 void * data)
    Function type: xmlHashScanner
    void	xmlHashScanner			(void * payload,
    					 void * data,
    					 const xmlChar * name)
    Function type: xmlHashScannerFull
    void	xmlHashScannerFull		(void * payload,
    					 void * data,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 const xmlChar * name3)
    int	xmlHashSize			(xmlHashTablePtr table)
    int	xmlHashUpdateEntry		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 void * userdata,
    					 xmlHashDeallocator f)
    int	xmlHashUpdateEntry2		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 void * userdata,
    					 xmlHashDeallocator f)
    int	xmlHashUpdateEntry3		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 const xmlChar * name3,
    					 void * userdata,
    					 xmlHashDeallocator f)
## Description ### Macro: XML_CAST_FPTR
    #define XML_CAST_FPTR
Macro to do a casting from an object pointer to a function pointer without encountering a warning from gcc #define XML_CAST_FPTR(fptr) (*(void **)(&fptr)) This macro violated ISO C aliasing rules (gcc4 on s390 broke) so it is disabled now ### Structure xmlHashTable
    Structure xmlHashTable
    struct _xmlHashTable {
    The content of this structure is not made public by the API.
    }
### Function: xmlHashAddEntry
    int	xmlHashAddEntry			(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 void * userdata)
Add the @userdata to the hash @table. This can later be retrieved by using the @name. Duplicate names generate errors.
`table`: | the hash table
`name`: | the name of the userdata
`userdata`: | a pointer to the userdata
`Returns`: | 0 the addition succeeded and -1 in case of error.
### Function: xmlHashAddEntry2
    int	xmlHashAddEntry2		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 void * userdata)
Add the @userdata to the hash @table. This can later be retrieved by using the (@name, @name2) tuple. Duplicate tuples generate errors.
`table`: | the hash table
`name`: | the name of the userdata
`name2`: | a second name of the userdata
`userdata`: | a pointer to the userdata
`Returns`: | 0 the addition succeeded and -1 in case of error.
### Function: xmlHashAddEntry3
    int	xmlHashAddEntry3		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 const xmlChar * name3,
    					 void * userdata)
Add the @userdata to the hash @table. This can later be retrieved by using the tuple (@name, @name2, @name3). Duplicate entries generate errors.
`table`: | the hash table
`name`: | the name of the userdata
`name2`: | a second name of the userdata
`name3`: | a third name of the userdata
`userdata`: | a pointer to the userdata
`Returns`: | 0 the addition succeeded and -1 in case of error.
### Function type: xmlHashCopier
    Function type: xmlHashCopier
    void *	xmlHashCopier			(void * payload,
    					 const xmlChar * name)
Callback to copy data from a hash.
`payload`: | the data in the hash
`name`: | the name associated
`Returns`: | a copy of the data or NULL in case of error.
### Function: xmlHashCopy
    xmlHashTablePtr	xmlHashCopy		(xmlHashTablePtr table,
    					 xmlHashCopier f)
Scan the hash @table and applied @f to each value.
`table`: | the hash table
`f`: | the copier function for items in the hash
`Returns`: | the new table or NULL in case of error.
### Function: xmlHashCreate
    xmlHashTablePtr	xmlHashCreate		(int size)
Create a new xmlHashTablePtr.
`size`: | the size of the hash table
`Returns`: | the newly created object, or NULL if an error occurred.
### Function: xmlHashCreateDict
    xmlHashTablePtr	xmlHashCreateDict	(int size,
    					 xmlDictPtr dict)
Create a new xmlHashTablePtr which will use @dict as the internal dictionary
`size`: | the size of the hash table
`dict`: | a dictionary to use for the hash
`Returns`: | the newly created object, or NULL if an error occurred.
### Function type: xmlHashDeallocator
    Function type: xmlHashDeallocator
    void	xmlHashDeallocator		(void * payload,
    					 const xmlChar * name)
Callback to free data from a hash.
`payload`: | the data in the hash
`name`: | the name associated
### Function: xmlHashDefaultDeallocator
    void	xmlHashDefaultDeallocator	(void * entry,
    					 const xmlChar * name)
Free a hash table entry with xmlFree.
`entry`: | the hash table entry
`name`: | the entry's name
### Function: xmlHashFree
    void	xmlHashFree			(xmlHashTablePtr table,
    					 xmlHashDeallocator f)
Free the hash @table and its contents. The userdata is deallocated with @f if provided.
`table`: | the hash table
`f`: | the deallocator function for items in the hash
### Function: xmlHashLookup
    void *	xmlHashLookup			(xmlHashTablePtr table,
    					 const xmlChar * name)
Find the userdata specified by the @name.
`table`: | the hash table
`name`: | the name of the userdata
`Returns`: | the pointer to the userdata
### Function: xmlHashLookup2
    void *	xmlHashLookup2			(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2)
Find the userdata specified by the (@name, @name2) tuple.
`table`: | the hash table
`name`: | the name of the userdata
`name2`: | a second name of the userdata
`Returns`: | the pointer to the userdata
### Function: xmlHashLookup3
    void *	xmlHashLookup3			(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 const xmlChar * name3)
Find the userdata specified by the (@name, @name2, @name3) tuple.
`table`: | the hash table
`name`: | the name of the userdata
`name2`: | a second name of the userdata
`name3`: | a third name of the userdata
`Returns`: | the a pointer to the userdata
### Function: xmlHashQLookup
    void *	xmlHashQLookup			(xmlHashTablePtr table,
    					 const xmlChar * prefix,
    					 const xmlChar * name)
Find the userdata specified by the QName @prefix:@name/@name.
`table`: | the hash table
`prefix`: | the prefix of the userdata
`name`: | the name of the userdata
`Returns`: | the pointer to the userdata
### Function: xmlHashQLookup2
    void *	xmlHashQLookup2			(xmlHashTablePtr table,
    					 const xmlChar * prefix,
    					 const xmlChar * name,
    					 const xmlChar * prefix2,
    					 const xmlChar * name2)
Find the userdata specified by the QNames tuple
`table`: | the hash table
`prefix`: | the prefix of the userdata
`name`: | the name of the userdata
`prefix2`: | the second prefix of the userdata
`name2`: | a second name of the userdata
`Returns`: | the pointer to the userdata
### Function: xmlHashQLookup3
    void *	xmlHashQLookup3			(xmlHashTablePtr table,
    					 const xmlChar * prefix,
    					 const xmlChar * name,
    					 const xmlChar * prefix2,
    					 const xmlChar * name2,
    					 const xmlChar * prefix3,
    					 const xmlChar * name3)
Find the userdata specified by the (@name, @name2, @name3) tuple.
`table`: | the hash table
`prefix`: | the prefix of the userdata
`name`: | the name of the userdata
`prefix2`: | the second prefix of the userdata
`name2`: | a second name of the userdata
`prefix3`: | the third prefix of the userdata
`name3`: | a third name of the userdata
`Returns`: | the a pointer to the userdata
### Function: xmlHashRemoveEntry
    int	xmlHashRemoveEntry		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 xmlHashDeallocator f)
Find the userdata specified by the @name and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.
`table`: | the hash table
`name`: | the name of the userdata
`f`: | the deallocator function for removed item (if any)
`Returns`: | 0 if the removal succeeded and -1 in case of error or not found.
### Function: xmlHashRemoveEntry2
    int	xmlHashRemoveEntry2		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 xmlHashDeallocator f)
Find the userdata specified by the (@name, @name2) tuple and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.
`table`: | the hash table
`name`: | the name of the userdata
`name2`: | a second name of the userdata
`f`: | the deallocator function for removed item (if any)
`Returns`: | 0 if the removal succeeded and -1 in case of error or not found.
### Function: xmlHashRemoveEntry3
    int	xmlHashRemoveEntry3		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 const xmlChar * name3,
    					 xmlHashDeallocator f)
Find the userdata specified by the (@name, @name2, @name3) tuple and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.
`table`: | the hash table
`name`: | the name of the userdata
`name2`: | a second name of the userdata
`name3`: | a third name of the userdata
`f`: | the deallocator function for removed item (if any)
`Returns`: | 0 if the removal succeeded and -1 in case of error or not found.
### Function: xmlHashScan
    void	xmlHashScan			(xmlHashTablePtr table,
    					 xmlHashScanner f,
    					 void * data)
Scan the hash @table and applied @f to each value.
`table`: | the hash table
`f`: | the scanner function for items in the hash
`data`: | extra data passed to f
### Function: xmlHashScan3
    void	xmlHashScan3			(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 const xmlChar * name3,
    					 xmlHashScanner f,
    					 void * data)
Scan the hash @table and applied @f to each value matching (@name, @name2, @name3) tuple. If one of the names is null, the comparison is considered to match.
`table`: | the hash table
`name`: | the name of the userdata or NULL
`name2`: | a second name of the userdata or NULL
`name3`: | a third name of the userdata or NULL
`f`: | the scanner function for items in the hash
`data`: | extra data passed to f
### Function: xmlHashScanFull
    void	xmlHashScanFull			(xmlHashTablePtr table,
    					 xmlHashScannerFull f,
    					 void * data)
Scan the hash @table and applied @f to each value.
`table`: | the hash table
`f`: | the scanner function for items in the hash
`data`: | extra data passed to f
### Function: xmlHashScanFull3
    void	xmlHashScanFull3		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 const xmlChar * name3,
    					 xmlHashScannerFull f,
    					 void * data)
Scan the hash @table and applied @f to each value matching (@name, @name2, @name3) tuple. If one of the names is null, the comparison is considered to match.
`table`: | the hash table
`name`: | the name of the userdata or NULL
`name2`: | a second name of the userdata or NULL
`name3`: | a third name of the userdata or NULL
`f`: | the scanner function for items in the hash
`data`: | extra data passed to f
### Function type: xmlHashScanner
    Function type: xmlHashScanner
    void	xmlHashScanner			(void * payload,
    					 void * data,
    					 const xmlChar * name)
Callback when scanning data in a hash with the simple scanner.
`payload`: | the data in the hash
`data`: | extra scanner data
`name`: | the name associated
### Function type: xmlHashScannerFull
    Function type: xmlHashScannerFull
    void	xmlHashScannerFull		(void * payload,
    					 void * data,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 const xmlChar * name3)
Callback when scanning data in a hash with the full scanner.
`payload`: | the data in the hash
`data`: | extra scanner data
`name`: | the name associated
`name2`: | the second name associated
`name3`: | the third name associated
### Function: xmlHashSize
    int	xmlHashSize			(xmlHashTablePtr table)
Query the number of elements installed in the hash @table.
`table`: | the hash table
`Returns`: | the number of elements in the hash table or -1 in case of error
### Function: xmlHashUpdateEntry
    int	xmlHashUpdateEntry		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 void * userdata,
    					 xmlHashDeallocator f)
Add the @userdata to the hash @table. This can later be retrieved by using the @name. Existing entry for this @name will be removed and freed with @f if found.
`table`: | the hash table
`name`: | the name of the userdata
`userdata`: | a pointer to the userdata
`f`: | the deallocator function for replaced item (if any)
`Returns`: | 0 the addition succeeded and -1 in case of error.
### Function: xmlHashUpdateEntry2
    int	xmlHashUpdateEntry2		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 void * userdata,
    					 xmlHashDeallocator f)
Add the @userdata to the hash @table. This can later be retrieved by using the (@name, @name2) tuple. Existing entry for this tuple will be removed and freed with @f if found.
`table`: | the hash table
`name`: | the name of the userdata
`name2`: | a second name of the userdata
`userdata`: | a pointer to the userdata
`f`: | the deallocator function for replaced item (if any)
`Returns`: | 0 the addition succeeded and -1 in case of error.
### Function: xmlHashUpdateEntry3
    int	xmlHashUpdateEntry3		(xmlHashTablePtr table,
    					 const xmlChar * name,
    					 const xmlChar * name2,
    					 const xmlChar * name3,
    					 void * userdata,
    					 xmlHashDeallocator f)
Add the @userdata to the hash @table. This can later be retrieved by using the tuple (@name, @name2, @name3). Existing entry for this tuple will be removed and freed with @f if found.
`table`: | the hash table
`name`: | the name of the userdata
`name2`: | a second name of the userdata
`name3`: | a third name of the userdata
`userdata`: | a pointer to the userdata
`f`: | the deallocator function for replaced item (if any)
`Returns`: | 0 the addition succeeded and -1 in case of error.
Daniel Veillard