mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-01-27 14:03:36 +03:00
130 lines
4.0 KiB
C
130 lines
4.0 KiB
C
/*
|
|
* hash.c: chained hash tables
|
|
*
|
|
* Copyright (C) 2000 Bjorn Reese and Daniel Veillard.
|
|
*
|
|
* Permission to use, copy, modify, and distribute this software for any
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
* copyright notice and this permission notice appear in all copies.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
|
* MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
|
|
* CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
|
|
*
|
|
* Author: bjorn.reese@systematic.dk
|
|
*/
|
|
|
|
#ifndef __XML_HASH_H__
|
|
#define __XML_HASH_H__
|
|
|
|
#include <libxml/parser.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
* The hash table
|
|
*/
|
|
typedef struct _xmlHashTable xmlHashTable;
|
|
typedef xmlHashTable *xmlHashTablePtr;
|
|
|
|
/*
|
|
* function types:
|
|
*/
|
|
typedef void (*xmlHashDeallocator)(void *payload, xmlChar *name);
|
|
typedef void *(*xmlHashCopier)(void *payload, xmlChar *name);
|
|
typedef void *(*xmlHashScanner)(void *payload, void *data, xmlChar *name);
|
|
|
|
/*
|
|
* Constructor and destructor
|
|
*/
|
|
xmlHashTablePtr xmlHashCreate (int size);
|
|
void xmlHashFree (xmlHashTablePtr table,
|
|
xmlHashDeallocator f);
|
|
|
|
/*
|
|
* Add a new entry to the hash table
|
|
*/
|
|
int xmlHashAddEntry (xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
void *userdata);
|
|
int xmlHashUpdateEntry(xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
void *userdata,
|
|
xmlHashDeallocator f);
|
|
int xmlHashAddEntry2(xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
const xmlChar *name2,
|
|
void *userdata);
|
|
int xmlHashUpdateEntry2(xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
const xmlChar *name2,
|
|
void *userdata,
|
|
xmlHashDeallocator f);
|
|
int xmlHashAddEntry3(xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
const xmlChar *name2,
|
|
const xmlChar *name3,
|
|
void *userdata);
|
|
int xmlHashUpdateEntry3(xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
const xmlChar *name2,
|
|
const xmlChar *name3,
|
|
void *userdata,
|
|
xmlHashDeallocator f);
|
|
|
|
/*
|
|
* Remove an entry from the hash table
|
|
*/
|
|
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);
|
|
|
|
/*
|
|
* Retrieve the userdata
|
|
*/
|
|
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);
|
|
|
|
/*
|
|
* Helpers
|
|
*/
|
|
xmlHashTablePtr xmlHashCopy (xmlHashTablePtr table,
|
|
xmlHashCopier f);
|
|
int xmlHashSize (xmlHashTablePtr);
|
|
void xmlHashScan (xmlHashTablePtr table,
|
|
xmlHashScanner f,
|
|
void *data);
|
|
void xmlHashScan1 (xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
xmlHashScanner f,
|
|
void *data);
|
|
void xmlHashScan2 (xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
const xmlChar *name2,
|
|
xmlHashScanner f,
|
|
void *data);
|
|
void xmlHashScan3 (xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
const xmlChar *name2,
|
|
const xmlChar *name3,
|
|
xmlHashScanner f,
|
|
void *data);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* ! __XML_HASH_H__ */
|