Return to hash.h CVS log | Up to [Public] / XML |
1.1 veillard 1: /*
2: * hash.c: chained hash tables
3: *
4: * Copyright (C) 2000 Bjorn Reese and Daniel Veillard.
5: *
6: * Permission to use, copy, modify, and distribute this software for any
7: * purpose with or without fee is hereby granted, provided that the above
8: * copyright notice and this permission notice appear in all copies.
9: *
10: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
11: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
12: * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
13: * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
14: *
15: * Author: bjorn.reese@systematic.dk
16: */
17:
18: #ifndef __XML_HASH_H__
19: #define __XML_HASH_H__
20:
21: #include <libxml/parser.h>
22:
23: #ifdef __cplusplus
24: extern "C" {
25: #endif
26:
27: /*
1.6 ! veillard 28: * The hash table
1.1 veillard 29: */
1.2 veillard 30: typedef struct _xmlHashTable xmlHashTable;
31: typedef xmlHashTable *xmlHashTablePtr;
1.1 veillard 32:
33: /*
1.2 veillard 34: * function types:
1.1 veillard 35: */
1.5 veillard 36: typedef void (*xmlHashDeallocator)(void *payload, xmlChar *name);
37: typedef void *(*xmlHashCopier)(void *payload, xmlChar *name);
38: typedef void *(*xmlHashScanner)(void *payload, void *data, xmlChar *name);
1.1 veillard 39:
40: /*
41: * Constructor and destructor
42: */
43: xmlHashTablePtr xmlHashCreate (int size);
44: void xmlHashFree (xmlHashTablePtr table,
45: xmlHashDeallocator f);
46:
47: /*
48: * Add a new entry to the hash table
49: */
50: int xmlHashAddEntry (xmlHashTablePtr table,
51: const xmlChar *name,
52: void *userdata);
53: int xmlHashUpdateEntry(xmlHashTablePtr table,
54: const xmlChar *name,
55: void *userdata,
56: xmlHashDeallocator f);
1.3 veillard 57: int xmlHashAddEntry2(xmlHashTablePtr table,
58: const xmlChar *name,
59: const xmlChar *name2,
60: void *userdata);
61: int xmlHashUpdateEntry2(xmlHashTablePtr table,
62: const xmlChar *name,
63: const xmlChar *name2,
64: void *userdata,
65: xmlHashDeallocator f);
66: int xmlHashAddEntry3(xmlHashTablePtr table,
67: const xmlChar *name,
68: const xmlChar *name2,
69: const xmlChar *name3,
70: void *userdata);
71: int xmlHashUpdateEntry3(xmlHashTablePtr table,
72: const xmlChar *name,
73: const xmlChar *name2,
74: const xmlChar *name3,
75: void *userdata,
76: xmlHashDeallocator f);
1.1 veillard 77: /*
78: * Retrieve the userdata
79: */
80: void * xmlHashLookup (xmlHashTablePtr table,
81: const xmlChar *name);
1.3 veillard 82: void * xmlHashLookup2 (xmlHashTablePtr table,
83: const xmlChar *name,
84: const xmlChar *name2);
85: void * xmlHashLookup3 (xmlHashTablePtr table,
86: const xmlChar *name,
87: const xmlChar *name2,
88: const xmlChar *name3);
1.1 veillard 89:
1.2 veillard 90: /*
91: * Helpers
92: */
93: xmlHashTablePtr xmlHashCopy (xmlHashTablePtr table,
94: xmlHashCopier f);
95: void xmlHashScan (xmlHashTablePtr table,
96: xmlHashScanner f,
97: void *data);
1.4 veillard 98: void xmlHashScan1 (xmlHashTablePtr table,
99: const xmlChar *name,
100: xmlHashScanner f,
101: void *data);
102: void xmlHashScan2 (xmlHashTablePtr table,
103: const xmlChar *name,
104: const xmlChar *name2,
105: xmlHashScanner f,
106: void *data);
107: void xmlHashScan3 (xmlHashTablePtr table,
108: const xmlChar *name,
109: const xmlChar *name2,
110: const xmlChar *name3,
111: xmlHashScanner f,
112: void *data);
1.1 veillard 113: #ifdef __cplusplus
114: }
115: #endif
116: #endif /* ! __XML_HASH_H__ */