* Summary: Chained hash tables
* Description: This module implements the hash table support used in
*              various places in the library.
*
* Copy: See Copyright for the status of this software.
*
* Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.

/if not defined(XML_HASH_H__)
/define XML_HASH_H__

/include "libxmlrpg/xmlTypesC"

* The hash table.

d xmlHashTablePtr… d s * based(######typedef######)

/include "libxmlrpg/xmlversion"
/include "libxmlrpg/parser"
/include "libxmlrpg/dict"

* function types:

* xmlHashDeallocator:
* @payload:  the data in the hash
* @name:  the name associated
*
* Callback to free data from a hash.

d xmlHashDeallocator… d s * based(######typedef######) d procptr

* xmlHashCopier:
* @payload:  the data in the hash
* @name:  the name associated
*
* Callback to copy data from a hash.
*
* Returns a copy of the data or NULL in case of error.

d xmlHashCopier s * based(######typedef######) d procptr

* xmlHashScanner:
* @payload:  the data in the hash
* @data:  extra scannner data
* @name:  the name associated
*
* Callback when scanning data in a hash with the simple scanner.

d xmlHashScanner s * based(######typedef######) d procptr

* xmlHashScannerFull:
* @payload:  the data in the hash
* @data:  extra scannner data
* @name:  the name associated
* @name2:  the second name associated
* @name3:  the third name associated
*
* Callback when scanning data in a hash with the full scanner.

d xmlHashScannerFull… d s * based(######typedef######) d procptr

* Constructor and destructor.

d xmlHashCreate pr extproc('xmlHashCreate') d like(xmlHashTablePtr) d size value like(xmlCint)

d xmlHashCreateDict… d pr extproc('xmlHashCreateDict') d like(xmlHashTablePtr) d size value like(xmlCint) d dict value like(xmlDictPtr)

d xmlHashFree pr extproc('xmlHashFree') d table value like(xmlHashTablePtr) d f value like(xmlHashDeallocator)

* Add a new entry to the hash table.

d xmlHashAddEntry… d pr extproc('xmlHashAddEntry') d like(xmlCint) d table value like(xmlHashTablePtr) d name * value options(*string) const xmlChar * d userdata * value options(*string) void *

d xmlHashUpdateEntry… d pr extproc('xmlHashUpdateEntry') d like(xmlCint) d table value like(xmlHashTablePtr) d name * value options(*string) const xmlChar * d userdata * value options(*string) void * d f value like(xmlHashDeallocator)

d xmlHashAddEntry2… d pr extproc('xmlHashAddEntry2') d like(xmlCint) d table value like(xmlHashTablePtr) d name * value options(*string) const xmlChar * d name2 * value options(*string) const xmlChar * d userdata * value options(*string) void *

d xmlHashUpdateEntry2… d pr extproc('xmlHashUpdateEntry2') d like(xmlCint) d table value like(xmlHashTablePtr) d name * value options(*string) const xmlChar * d name2 * value options(*string) const xmlChar * d userdata * value options(*string) void * d f value like(xmlHashDeallocator)

d xmlHashAddEntry3… d pr extproc('xmlHashAddEntry3') d like(xmlCint) d table value like(xmlHashTablePtr) d name * value options(*string) const xmlChar * d name2 * value options(*string) const xmlChar * d name3 * value options(*string) const xmlChar * d userdata * value options(*string) void *

d xmlHashUpdateEntry3… d pr extproc('xmlHashUpdateEntry3') d like(xmlCint) d table value like(xmlHashTablePtr) d name * value options(*string) const xmlChar * d name2 * value options(*string) const xmlChar * d name3 * value options(*string) const xmlChar * d userdata * value options(*string) void * d f value like(xmlHashDeallocator)

* Remove an entry from the hash table.

d xmlHashRemoveEntry… d pr extproc('xmlHashRemoveEntry') d like(xmlCint) d table value like(xmlHashTablePtr) d name * value options(*string) const xmlChar * d f value like(xmlHashDeallocator)

d xmlHashRemoveEntry2… d pr extproc('xmlHashRemoveEntry2') d like(xmlCint) d table value like(xmlHashTablePtr) d name * value options(*string) const xmlChar * d name2 * value options(*string) const xmlChar * d f value like(xmlHashDeallocator)

d xmlHashRemoveEntry3… d pr extproc('xmlHashRemoveEntry3') d like(xmlCint) d table value like(xmlHashTablePtr) d name * value options(*string) const xmlChar * d name2 * value options(*string) const xmlChar * d name3 * value options(*string) const xmlChar * d f value like(xmlHashDeallocator)

* Retrieve the userdata.

d xmlHashLookup pr * extproc('xmlHashLookup') void * d table value like(xmlHashTablePtr) d name * value options(*string) const xmlChar *

d xmlHashLookup2 pr * extproc('xmlHashLookup2') void * d table value like(xmlHashTablePtr) d name * value options(*string) const xmlChar * d name2 * value options(*string) const xmlChar *

d xmlHashLookup3 pr * extproc('xmlHashLookup3') void * d table value like(xmlHashTablePtr) d name * value options(*string) const xmlChar * d name2 * value options(*string) const xmlChar * d name3 * value options(*string) const xmlChar *

d xmlHashQLookup pr * extproc('xmlHashQLookup') void * d table value like(xmlHashTablePtr) d name * value options(*string) const xmlChar * d prefix * value options(*string) const xmlChar *

d xmlHashQLookup2… d pr * extproc('xmlHashQLookup2') void * d table value like(xmlHashTablePtr) d name * value options(*string) const xmlChar * d prefix * value options(*string) const xmlChar * d name2 * value options(*string) const xmlChar * d prefix2 * value options(*string) const xmlChar *

d xmlHashQLookup3… d pr * extproc('xmlHashQLookup3') void * d table value like(xmlHashTablePtr) d name * value options(*string) const xmlChar * d prefix * value options(*string) const xmlChar * d name2 * value options(*string) const xmlChar * d prefix2 * value options(*string) const xmlChar * d name3 * value options(*string) const xmlChar * d prefix3 * value options(*string) const xmlChar *

* Helpers.

d xmlHashCopy pr extproc('xmlHashCopy') d like(xmlHashTablePtr) d table value like(xmlHashTablePtr) d f value like(xmlHashCopier)

d xmlHashSize pr extproc('xmlHashSize') d like(xmlCint) d table value like(xmlHashTablePtr)

d xmlHashScan pr extproc('xmlHashScan') d table value like(xmlHashTablePtr) d f value like(xmlHashScanner) d data * value options(*string) void *

d xmlHashScan3 pr extproc('xmlHashScan3') d table value like(xmlHashTablePtr) d name * value options(*string) const xmlChar * d name2 * value options(*string) const xmlChar * d name3 * value options(*string) const xmlChar * d f value like(xmlHashScanner) d data * value options(*string) void *

d xmlHashScanFull… d pr extproc('xmlHashScanFull') d table value like(xmlHashTablePtr) d f value like(xmlHashScannerFull) d data * value options(*string) void *

d xmlHashScanFull3… d pr extproc('xmlHashScanFull3') d table value like(xmlHashTablePtr) d name * value options(*string) const xmlChar * d name2 * value options(*string) const xmlChar * d name3 * value options(*string) const xmlChar * d f value like(xmlHashScannerFull) d data * value options(*string) void *

/endif                                                                    XML_HASH_H__