hash.h
1 /*
2 * hash.h: 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
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 /*
28 * The hash table.
29 */
30 typedef struct _xmlHashTable xmlHashTable; <typedef:xmlHashTable>
31 typedef xmlHashTable *xmlHashTablePtr; <typedef:xmlHashTablePtr>
32
33 /*
34 * function types:
35 */
36 /**
37 * xmlHashDeallocator:
38 * @payload: the data in the hash
39 * @name: the name associated
40 *
41 * Callback to free data from a hash.
42 */
43 typedef void (*xmlHashDeallocator)(void *payload, xmlChar *name); <typedef:xmlHashDeallocator>
44 /**
45 * xmlHashCopier:
46 * @payload: the data in the hash
47 * @name: the name associated
48 *
49 * Callback to copy data from a hash.
50 *
51 * Returns a copy of the data or NULL in case of error.
52 */
53 typedef void *(*xmlHashCopier)(void *payload, xmlChar *name); <typedef:xmlHashCopier>
54 /**
55 * xmlHashScanner:
56 * @payload: the data in the hash
57 * @data: extra scannner data
58 * @name: the name associated
59 *
60 * Callback when scanning data in a hash with the simple scanner.
61 */
62 typedef void (*xmlHashScanner)(void *payload, void *data, xmlChar *name); <typedef:xmlHashScanner>
63 /**
64 * xmlHashScannerFull:
65 * @payload: the data in the hash
66 * @data: extra scannner data
67 * @name: the name associated
68 * @name2: the second name associated
69 * @name3: the third name associated
70 *
71 * Callback when scanning data in a hash with the full scanner.
72 */
73 typedef void (*xmlHashScannerFull)(void *payload, void *data,
74 const xmlChar *name, const xmlChar *name2,
75 const xmlChar *name3); <typedef:xmlHashScannerFull>
76
77 /*
78 * Constructor and destructor.
79 */
80 xmlHashTablePtr xmlHashCreate (int size);
81 void xmlHashFree (xmlHashTablePtr table,
82 xmlHashDeallocator f);
83
84 /*
85 * Add a new entry to the hash table.
86 */
87 int xmlHashAddEntry (xmlHashTablePtr table,
88 const xmlChar *name,
89 void *userdata);
90 int xmlHashUpdateEntry(xmlHashTablePtr table,
91 const xmlChar *name,
92 void *userdata,
93 xmlHashDeallocator f);
94 int xmlHashAddEntry2(xmlHashTablePtr table,
95 const xmlChar *name,
96 const xmlChar *name2,
97 void *userdata);
98 int xmlHashUpdateEntry2(xmlHashTablePtr table,
99 const xmlChar *name,
100 const xmlChar *name2,
101 void *userdata,
102 xmlHashDeallocator f);
103 int xmlHashAddEntry3(xmlHashTablePtr table,
104 const xmlChar *name,
105 const xmlChar *name2,
106 const xmlChar *name3,
107 void *userdata);
108 int xmlHashUpdateEntry3(xmlHashTablePtr table,
109 const xmlChar *name,
110 const xmlChar *name2,
111 const xmlChar *name3,
112 void *userdata,
113 xmlHashDeallocator f);
114
115 /*
116 * Remove an entry from the hash table.
117 */
118 int xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name,
119 xmlHashDeallocator f);
120 int xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name,
121 const xmlChar *name2, xmlHashDeallocator f);
122 int xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name,
123 const xmlChar *name2, const xmlChar *name3,
124 xmlHashDeallocator f);
125
126 /*
127 * Retrieve the userdata.
128 */
129 void * xmlHashLookup (xmlHashTablePtr table,
130 const xmlChar *name);
131 void * xmlHashLookup2 (xmlHashTablePtr table,
132 const xmlChar *name,
133 const xmlChar *name2);
134 void * xmlHashLookup3 (xmlHashTablePtr table,
135 const xmlChar *name,
136 const xmlChar *name2,
137 const xmlChar *name3);
138
139 /*
140 * Helpers.
141 */
142 xmlHashTablePtr xmlHashCopy (xmlHashTablePtr table,
143 xmlHashCopier f);
144 int xmlHashSize (xmlHashTablePtr table);
145 void xmlHashScan (xmlHashTablePtr table,
146 xmlHashScanner f,
147 void *data);
148 void xmlHashScan3 (xmlHashTablePtr table,
149 const xmlChar *name,
150 const xmlChar *name2,
151 const xmlChar *name3,
152 xmlHashScanner f,
153 void *data);
154 void xmlHashScanFull (xmlHashTablePtr table,
155 xmlHashScannerFull f,
156 void *data);
157 void xmlHashScanFull3(xmlHashTablePtr table,
158 const xmlChar *name,
159 const xmlChar *name2,
160 const xmlChar *name3,
161 xmlHashScannerFull f,
162 void *data);
163 #ifdef __cplusplus
164 }
165 #endif
166 #endif /* ! __XML_HASH_H__ */