mirror of
https://gitlab.gnome.org/GNOME/libxml2
synced 2025-03-28 21:33:13 +00:00

fixing bugs and migrating to SAX2 interface by default. There is some work letf TODO, like namespace validation and attributes normalization (this break C14N right now) * Makefile.am: fixed the test rules * include/libxml/SAX2.h include/libxml/parser.h include/libxml/parserInternals.h SAX2.c parser.c parserInternals.c: changing the parser, migrating to SAX2, adding new interface to switch back to SAX1 or initialize a SAX block for v1 or v2. Most of the namespace work is done below SAX, as well as attribute defaulting * globals.c: changed initialization of the default SAX handlers * hash.c tree.c include/libxml/hash.h: added QName specific handling * xmlIO.c: small fix * xmllint.c testSAX.c: provide a --sax1 switch to test the old version code path * result/p3p result/p3p.sax result/noent/p3p test/p3p: the new code pointed out a typo in a very old test namespace Daniel
206 lines
5.9 KiB
C
206 lines
5.9 KiB
C
/*
|
|
* hash.h: 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/xmlversion.h>
|
|
#include <libxml/parser.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
* The hash table.
|
|
*/
|
|
typedef struct _xmlHashTable xmlHashTable;
|
|
typedef xmlHashTable *xmlHashTablePtr;
|
|
|
|
/*
|
|
* function types:
|
|
*/
|
|
/**
|
|
* xmlHashDeallocator:
|
|
* @payload: the data in the hash
|
|
* @name: the name associated
|
|
*
|
|
* Callback to free data from a hash.
|
|
*/
|
|
typedef void (*xmlHashDeallocator)(void *payload, xmlChar *name);
|
|
/**
|
|
* 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.
|
|
*/
|
|
typedef void *(*xmlHashCopier)(void *payload, xmlChar *name);
|
|
/**
|
|
* 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.
|
|
*/
|
|
typedef void (*xmlHashScanner)(void *payload, void *data, xmlChar *name);
|
|
/**
|
|
* 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.
|
|
*/
|
|
typedef void (*xmlHashScannerFull)(void *payload, void *data,
|
|
const xmlChar *name, const xmlChar *name2,
|
|
const xmlChar *name3);
|
|
|
|
/*
|
|
* Constructor and destructor.
|
|
*/
|
|
XMLPUBFUN xmlHashTablePtr XMLCALL
|
|
xmlHashCreate (int size);
|
|
XMLPUBFUN void XMLCALL
|
|
xmlHashFree (xmlHashTablePtr table,
|
|
xmlHashDeallocator f);
|
|
|
|
/*
|
|
* Add a new entry to the hash table.
|
|
*/
|
|
XMLPUBFUN int XMLCALL
|
|
xmlHashAddEntry (xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
void *userdata);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlHashUpdateEntry(xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
void *userdata,
|
|
xmlHashDeallocator f);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlHashAddEntry2(xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
const xmlChar *name2,
|
|
void *userdata);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlHashUpdateEntry2(xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
const xmlChar *name2,
|
|
void *userdata,
|
|
xmlHashDeallocator f);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlHashAddEntry3(xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
const xmlChar *name2,
|
|
const xmlChar *name3,
|
|
void *userdata);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlHashUpdateEntry3(xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
const xmlChar *name2,
|
|
const xmlChar *name3,
|
|
void *userdata,
|
|
xmlHashDeallocator f);
|
|
|
|
/*
|
|
* Remove an entry from the hash table.
|
|
*/
|
|
XMLPUBFUN int XMLCALL
|
|
xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name,
|
|
xmlHashDeallocator f);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name,
|
|
const xmlChar *name2, xmlHashDeallocator f);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name,
|
|
const xmlChar *name2, const xmlChar *name3,
|
|
xmlHashDeallocator f);
|
|
|
|
/*
|
|
* Retrieve the userdata.
|
|
*/
|
|
XMLPUBFUN void * XMLCALL
|
|
xmlHashLookup (xmlHashTablePtr table,
|
|
const xmlChar *name);
|
|
XMLPUBFUN void * XMLCALL
|
|
xmlHashLookup2 (xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
const xmlChar *name2);
|
|
XMLPUBFUN void * XMLCALL
|
|
xmlHashLookup3 (xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
const xmlChar *name2,
|
|
const xmlChar *name3);
|
|
XMLPUBFUN void * XMLCALL
|
|
xmlHashQLookup (xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
const xmlChar *prefix);
|
|
XMLPUBFUN void * XMLCALL
|
|
xmlHashQLookup2 (xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
const xmlChar *prefix,
|
|
const xmlChar *name2,
|
|
const xmlChar *prefix2);
|
|
XMLPUBFUN void * XMLCALL
|
|
xmlHashQLookup3 (xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
const xmlChar *prefix,
|
|
const xmlChar *name2,
|
|
const xmlChar *prefix2,
|
|
const xmlChar *name3,
|
|
const xmlChar *prefix3);
|
|
|
|
/*
|
|
* Helpers.
|
|
*/
|
|
XMLPUBFUN xmlHashTablePtr XMLCALL
|
|
xmlHashCopy (xmlHashTablePtr table,
|
|
xmlHashCopier f);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlHashSize (xmlHashTablePtr table);
|
|
XMLPUBFUN void XMLCALL
|
|
xmlHashScan (xmlHashTablePtr table,
|
|
xmlHashScanner f,
|
|
void *data);
|
|
XMLPUBFUN void XMLCALL
|
|
xmlHashScan3 (xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
const xmlChar *name2,
|
|
const xmlChar *name3,
|
|
xmlHashScanner f,
|
|
void *data);
|
|
XMLPUBFUN void XMLCALL
|
|
xmlHashScanFull (xmlHashTablePtr table,
|
|
xmlHashScannerFull f,
|
|
void *data);
|
|
XMLPUBFUN void XMLCALL
|
|
xmlHashScanFull3(xmlHashTablePtr table,
|
|
const xmlChar *name,
|
|
const xmlChar *name2,
|
|
const xmlChar *name3,
|
|
xmlHashScannerFull f,
|
|
void *data);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* ! __XML_HASH_H__ */
|