xref: /aosp_15_r20/external/libxml2/doc/devhelp/libxml2-hash.html (revision 7c5688314b92172186c154356a6374bf7684c3ca)
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>hash: Chained hash tables</title>
5<meta name="generator" content="Libxml2 devhelp stylesheet">
6<link rel="start" href="index.html" title="libxml2 Reference Manual">
7<link rel="up" href="general.html" title="API">
8<link rel="stylesheet" href="style.css" type="text/css">
9<link rel="chapter" href="general.html" title="API">
10</head>
11<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
12<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
13<td><a accesskey="p" href="libxml2-globals.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
14<td><a accesskey="u" href="general.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
15<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
16<td><a accesskey="n" href="libxml2-list.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
17<th width="100%" align="center">libxml2 Reference Manual</th>
18</tr></table>
19<h2><span class="refentrytitle">hash</span></h2>
20<p>hash - Chained hash tables</p>
21<p>This module implements the hash table support used in various places in the library. </p>
22<p>Author(s): Bjorn Reese &lt;[email protected]&gt; </p>
23<div class="refsynopsisdiv">
24<h2>Synopsis</h2>
25<pre class="synopsis">#define <a href="#XML_CAST_FPTR">XML_CAST_FPTR</a>(fptr);
26typedef struct _xmlHashTable <a href="#xmlHashTable">xmlHashTable</a>;
27typedef <a href="libxml2-hash.html#xmlHashTable">xmlHashTable</a> * <a href="#xmlHashTablePtr">xmlHashTablePtr</a>;
28int	<a href="#xmlHashAdd">xmlHashAdd</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 void * payload);
29int	<a href="#xmlHashAdd2">xmlHashAdd2</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 void * payload);
30int	<a href="#xmlHashAdd3">xmlHashAdd3</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br>					 void * payload);
31int	<a href="#xmlHashAddEntry">xmlHashAddEntry</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 void * payload);
32int	<a href="#xmlHashAddEntry2">xmlHashAddEntry2</a>		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 void * payload);
33int	<a href="#xmlHashAddEntry3">xmlHashAddEntry3</a>		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br>					 void * payload);
34typedef void * <a href="#xmlHashCopier">xmlHashCopier</a>			(void * payload, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
35<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a>	<a href="#xmlHashCopy">xmlHashCopy</a>		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 <a href="libxml2-hash.html#xmlHashCopier">xmlHashCopier</a> copy);
36<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a>	<a href="#xmlHashCopySafe">xmlHashCopySafe</a>		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 <a href="libxml2-hash.html#xmlHashCopier">xmlHashCopier</a> copyFunc, <br>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> deallocFunc);
37<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a>	<a href="#xmlHashCreate">xmlHashCreate</a>		(int size);
38<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a>	<a href="#xmlHashCreateDict">xmlHashCreateDict</a>	(int size, <br>					 <a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict);
39typedef void <a href="#xmlHashDeallocator">xmlHashDeallocator</a>		(void * payload, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
40void	<a href="#xmlHashDefaultDeallocator">xmlHashDefaultDeallocator</a>	(void * entry, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key);
41void	<a href="#xmlHashFree">xmlHashFree</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc);
42void *	<a href="#xmlHashLookup">xmlHashLookup</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key);
43void *	<a href="#xmlHashLookup2">xmlHashLookup2</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2);
44void *	<a href="#xmlHashLookup3">xmlHashLookup3</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3);
45void *	<a href="#xmlHashQLookup">xmlHashQLookup</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
46void *	<a href="#xmlHashQLookup2">xmlHashQLookup2</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2);
47void *	<a href="#xmlHashQLookup3">xmlHashQLookup3</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix3, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3);
48int	<a href="#xmlHashRemoveEntry">xmlHashRemoveEntry</a>		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc);
49int	<a href="#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a>		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc);
50int	<a href="#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a>		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc);
51void	<a href="#xmlHashScan">xmlHashScan</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 <a href="libxml2-hash.html#xmlHashScanner">xmlHashScanner</a> scan, <br>					 void * data);
52void	<a href="#xmlHashScan3">xmlHashScan3</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br>					 <a href="libxml2-hash.html#xmlHashScanner">xmlHashScanner</a> scan, <br>					 void * data);
53void	<a href="#xmlHashScanFull">xmlHashScanFull</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 <a href="libxml2-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> scan, <br>					 void * data);
54void	<a href="#xmlHashScanFull3">xmlHashScanFull3</a>		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br>					 <a href="libxml2-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> scan, <br>					 void * data);
55typedef void <a href="#xmlHashScanner">xmlHashScanner</a>			(void * payload, <br>					 void * data, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
56typedef void <a href="#xmlHashScannerFull">xmlHashScannerFull</a>		(void * payload, <br>					 void * data, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3);
57int	<a href="#xmlHashSize">xmlHashSize</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash);
58int	<a href="#xmlHashUpdateEntry">xmlHashUpdateEntry</a>		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 void * payload, <br>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc);
59int	<a href="#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a>		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 void * payload, <br>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc);
60int	<a href="#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a>		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br>					 void * payload, <br>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc);
61</pre>
62</div>
63<div class="refsect1" lang="en"><h2>Description</h2></div>
64<div class="refsect1" lang="en">
65<h2>Details</h2>
66<div class="refsect2" lang="en">
67<div class="refsect2" lang="en">
68<h3>
69<a name="XML_CAST_FPTR">Macro </a>XML_CAST_FPTR</h3>
70<pre class="programlisting">#define <a href="#XML_CAST_FPTR">XML_CAST_FPTR</a>(fptr);
71</pre>
72<p>Macro to do a casting from an object pointer to a function pointer without encountering a warning from gcc #define XML_CAST_FPTR(fptr) (*(void **)(&amp;fptr)) This macro violated ISO C aliasing rules (gcc4 on s390 broke) so it is disabled now</p>
73<div class="variablelist"><table border="0">
74<col align="left">
75<tbody><tr>
76<td><span class="term"><i><tt>fptr</tt></i>:</span></td>
77<td>pointer to a function</td>
78</tr></tbody>
79</table></div>
80</div>
81<hr>
82<div class="refsect2" lang="en">
83<h3>
84<a name="xmlHashTable">Structure </a>xmlHashTable</h3>
85<pre class="programlisting">struct _xmlHashTable {
86The content of this structure is not made public by the API.
87} xmlHashTable;
88</pre>
89<p></p>
90</div>
91<hr>
92<div class="refsect2" lang="en">
93<h3>
94<a name="xmlHashTablePtr">Typedef </a>xmlHashTablePtr</h3>
95<pre class="programlisting"><a href="libxml2-hash.html#xmlHashTable">xmlHashTable</a> * xmlHashTablePtr;
96</pre>
97<p></p>
98</div>
99<hr>
100<div class="refsect2" lang="en">
101<h3>
102<a name="xmlHashCopier"></a>Function type xmlHashCopier</h3>
103<pre class="programlisting">void *	xmlHashCopier			(void * payload, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br>
104</pre>
105<p>Callback to copy data from a hash.</p>
106<div class="variablelist"><table border="0">
107<col align="left">
108<tbody>
109<tr>
110<td><span class="term"><i><tt>payload</tt></i>:</span></td>
111<td>the data in the hash</td>
112</tr>
113<tr>
114<td><span class="term"><i><tt>name</tt></i>:</span></td>
115<td>the name associated</td>
116</tr>
117<tr>
118<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
119<td>a copy of the data or NULL in case of error.</td>
120</tr>
121</tbody>
122</table></div>
123</div>
124<hr>
125<div class="refsect2" lang="en">
126<h3>
127<a name="xmlHashDeallocator"></a>Function type xmlHashDeallocator</h3>
128<pre class="programlisting">void	xmlHashDeallocator		(void * payload, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br>
129</pre>
130<p>Callback to free data from a hash.</p>
131<div class="variablelist"><table border="0">
132<col align="left">
133<tbody>
134<tr>
135<td><span class="term"><i><tt>payload</tt></i>:</span></td>
136<td>the data in the hash</td>
137</tr>
138<tr>
139<td><span class="term"><i><tt>name</tt></i>:</span></td>
140<td>the name associated</td>
141</tr>
142</tbody>
143</table></div>
144</div>
145<hr>
146<div class="refsect2" lang="en">
147<h3>
148<a name="xmlHashScanner"></a>Function type xmlHashScanner</h3>
149<pre class="programlisting">void	xmlHashScanner			(void * payload, <br>					 void * data, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br>
150</pre>
151<p>Callback when scanning data in a hash with the simple scanner.</p>
152<div class="variablelist"><table border="0">
153<col align="left">
154<tbody>
155<tr>
156<td><span class="term"><i><tt>payload</tt></i>:</span></td>
157<td>the data in the hash</td>
158</tr>
159<tr>
160<td><span class="term"><i><tt>data</tt></i>:</span></td>
161<td>extra scanner data</td>
162</tr>
163<tr>
164<td><span class="term"><i><tt>name</tt></i>:</span></td>
165<td>the name associated</td>
166</tr>
167</tbody>
168</table></div>
169</div>
170<hr>
171<div class="refsect2" lang="en">
172<h3>
173<a name="xmlHashScannerFull"></a>Function type xmlHashScannerFull</h3>
174<pre class="programlisting">void	xmlHashScannerFull		(void * payload, <br>					 void * data, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3)<br>
175</pre>
176<p>Callback when scanning data in a hash with the full scanner.</p>
177<div class="variablelist"><table border="0">
178<col align="left">
179<tbody>
180<tr>
181<td><span class="term"><i><tt>payload</tt></i>:</span></td>
182<td>the data in the hash</td>
183</tr>
184<tr>
185<td><span class="term"><i><tt>data</tt></i>:</span></td>
186<td>extra scanner data</td>
187</tr>
188<tr>
189<td><span class="term"><i><tt>name</tt></i>:</span></td>
190<td>the name associated</td>
191</tr>
192<tr>
193<td><span class="term"><i><tt>name2</tt></i>:</span></td>
194<td>the second name associated</td>
195</tr>
196<tr>
197<td><span class="term"><i><tt>name3</tt></i>:</span></td>
198<td>the third name associated</td>
199</tr>
200</tbody>
201</table></div>
202</div>
203<hr>
204<div class="refsect2" lang="en">
205<h3>
206<a name="xmlHashAdd"></a>xmlHashAdd ()</h3>
207<pre class="programlisting">int	xmlHashAdd			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 void * payload)<br>
208</pre>
209<p>Add a hash table entry. If an entry with this key already exists, payload will not be updated and 0 is returned. This return value can't be distinguished from out-of-memory errors, so this function should be used with care. Available since 2.13.0.</p>
210<div class="variablelist"><table border="0">
211<col align="left">
212<tbody>
213<tr>
214<td><span class="term"><i><tt>hash</tt></i>:</span></td>
215<td>hash table</td>
216</tr>
217<tr>
218<td><span class="term"><i><tt>key</tt></i>:</span></td>
219<td>string key</td>
220</tr>
221<tr>
222<td><span class="term"><i><tt>payload</tt></i>:</span></td>
223<td>pointer to the payload</td>
224</tr>
225<tr>
226<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
227<td>1 on success, 0 if an entry exists and -1 in case of error.</td>
228</tr>
229</tbody>
230</table></div>
231</div>
232<hr>
233<div class="refsect2" lang="en">
234<h3>
235<a name="xmlHashAdd2"></a>xmlHashAdd2 ()</h3>
236<pre class="programlisting">int	xmlHashAdd2			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 void * payload)<br>
237</pre>
238<p>Add a hash table entry with two strings as key. See <a href="libxml2-hash.html#xmlHashAdd">xmlHashAdd</a>. Available since 2.13.0.</p>
239<div class="variablelist"><table border="0">
240<col align="left">
241<tbody>
242<tr>
243<td><span class="term"><i><tt>hash</tt></i>:</span></td>
244<td>hash table</td>
245</tr>
246<tr>
247<td><span class="term"><i><tt>key</tt></i>:</span></td>
248<td>first string key</td>
249</tr>
250<tr>
251<td><span class="term"><i><tt>key2</tt></i>:</span></td>
252<td>second string key</td>
253</tr>
254<tr>
255<td><span class="term"><i><tt>payload</tt></i>:</span></td>
256<td>pointer to the payload</td>
257</tr>
258<tr>
259<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
260<td>1 on success, 0 if an entry exists and -1 in case of error.</td>
261</tr>
262</tbody>
263</table></div>
264</div>
265<hr>
266<div class="refsect2" lang="en">
267<h3>
268<a name="xmlHashAdd3"></a>xmlHashAdd3 ()</h3>
269<pre class="programlisting">int	xmlHashAdd3			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br>					 void * payload)<br>
270</pre>
271<p>Add a hash table entry with three strings as key. See <a href="libxml2-hash.html#xmlHashAdd">xmlHashAdd</a>. Available since 2.13.0.</p>
272<div class="variablelist"><table border="0">
273<col align="left">
274<tbody>
275<tr>
276<td><span class="term"><i><tt>hash</tt></i>:</span></td>
277<td>hash table</td>
278</tr>
279<tr>
280<td><span class="term"><i><tt>key</tt></i>:</span></td>
281<td>first string key</td>
282</tr>
283<tr>
284<td><span class="term"><i><tt>key2</tt></i>:</span></td>
285<td>second string key</td>
286</tr>
287<tr>
288<td><span class="term"><i><tt>key3</tt></i>:</span></td>
289<td>third string key</td>
290</tr>
291<tr>
292<td><span class="term"><i><tt>payload</tt></i>:</span></td>
293<td>pointer to the payload</td>
294</tr>
295<tr>
296<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
297<td>1 on success, 0 if an entry exists and -1 in case of error.</td>
298</tr>
299</tbody>
300</table></div>
301</div>
302<hr>
303<div class="refsect2" lang="en">
304<h3>
305<a name="xmlHashAddEntry"></a>xmlHashAddEntry ()</h3>
306<pre class="programlisting">int	xmlHashAddEntry			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 void * payload)<br>
307</pre>
308<p>Add a hash table entry. If an entry with this key already exists, payload will not be updated and -1 is returned. This return value can't be distinguished from out-of-memory errors, so this function should be used with care. NOTE: This function doesn't allow to distinguish malloc failures from existing entries. Use <a href="libxml2-hash.html#xmlHashAdd">xmlHashAdd</a> instead.</p>
309<div class="variablelist"><table border="0">
310<col align="left">
311<tbody>
312<tr>
313<td><span class="term"><i><tt>hash</tt></i>:</span></td>
314<td>hash table</td>
315</tr>
316<tr>
317<td><span class="term"><i><tt>key</tt></i>:</span></td>
318<td>string key</td>
319</tr>
320<tr>
321<td><span class="term"><i><tt>payload</tt></i>:</span></td>
322<td>pointer to the payload</td>
323</tr>
324<tr>
325<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
326<td>0 on success and -1 in case of error.</td>
327</tr>
328</tbody>
329</table></div>
330</div>
331<hr>
332<div class="refsect2" lang="en">
333<h3>
334<a name="xmlHashAddEntry2"></a>xmlHashAddEntry2 ()</h3>
335<pre class="programlisting">int	xmlHashAddEntry2		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 void * payload)<br>
336</pre>
337<p>Add a hash table entry with two strings as key. See <a href="libxml2-hash.html#xmlHashAddEntry">xmlHashAddEntry</a>.</p>
338<div class="variablelist"><table border="0">
339<col align="left">
340<tbody>
341<tr>
342<td><span class="term"><i><tt>hash</tt></i>:</span></td>
343<td>hash table</td>
344</tr>
345<tr>
346<td><span class="term"><i><tt>key</tt></i>:</span></td>
347<td>first string key</td>
348</tr>
349<tr>
350<td><span class="term"><i><tt>key2</tt></i>:</span></td>
351<td>second string key</td>
352</tr>
353<tr>
354<td><span class="term"><i><tt>payload</tt></i>:</span></td>
355<td>pointer to the payload</td>
356</tr>
357<tr>
358<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
359<td>0 on success and -1 in case of error.</td>
360</tr>
361</tbody>
362</table></div>
363</div>
364<hr>
365<div class="refsect2" lang="en">
366<h3>
367<a name="xmlHashAddEntry3"></a>xmlHashAddEntry3 ()</h3>
368<pre class="programlisting">int	xmlHashAddEntry3		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br>					 void * payload)<br>
369</pre>
370<p>Add a hash table entry with three strings as key. See <a href="libxml2-hash.html#xmlHashAddEntry">xmlHashAddEntry</a>.</p>
371<div class="variablelist"><table border="0">
372<col align="left">
373<tbody>
374<tr>
375<td><span class="term"><i><tt>hash</tt></i>:</span></td>
376<td>hash table</td>
377</tr>
378<tr>
379<td><span class="term"><i><tt>key</tt></i>:</span></td>
380<td>first string key</td>
381</tr>
382<tr>
383<td><span class="term"><i><tt>key2</tt></i>:</span></td>
384<td>second string key</td>
385</tr>
386<tr>
387<td><span class="term"><i><tt>key3</tt></i>:</span></td>
388<td>third string key</td>
389</tr>
390<tr>
391<td><span class="term"><i><tt>payload</tt></i>:</span></td>
392<td>pointer to the payload</td>
393</tr>
394<tr>
395<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
396<td>0 on success and -1 in case of error.</td>
397</tr>
398</tbody>
399</table></div>
400</div>
401<hr>
402<div class="refsect2" lang="en">
403<h3>
404<a name="xmlHashCopy"></a>xmlHashCopy ()</h3>
405<pre class="programlisting"><a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a>	xmlHashCopy		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 <a href="libxml2-hash.html#xmlHashCopier">xmlHashCopier</a> copy)<br>
406</pre>
407<p>DEPRECATED: Leaks memory in error case. Copy the hash table using @copy to copy payloads.</p>
408<div class="variablelist"><table border="0">
409<col align="left">
410<tbody>
411<tr>
412<td><span class="term"><i><tt>hash</tt></i>:</span></td>
413<td>hash table</td>
414</tr>
415<tr>
416<td><span class="term"><i><tt>copy</tt></i>:</span></td>
417<td>copier function for items in the hash</td>
418</tr>
419<tr>
420<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
421<td>the new table or NULL if a memory allocation failed.</td>
422</tr>
423</tbody>
424</table></div>
425</div>
426<hr>
427<div class="refsect2" lang="en">
428<h3>
429<a name="xmlHashCopySafe"></a>xmlHashCopySafe ()</h3>
430<pre class="programlisting"><a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a>	xmlHashCopySafe		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 <a href="libxml2-hash.html#xmlHashCopier">xmlHashCopier</a> copyFunc, <br>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> deallocFunc)<br>
431</pre>
432<p>Copy the hash table using @copyFunc to copy payloads. Available since 2.13.0.</p>
433<div class="variablelist"><table border="0">
434<col align="left">
435<tbody>
436<tr>
437<td><span class="term"><i><tt>hash</tt></i>:</span></td>
438<td>hash table</td>
439</tr>
440<tr>
441<td><span class="term"><i><tt>copyFunc</tt></i>:</span></td>
442<td>copier function for items in the hash</td>
443</tr>
444<tr>
445<td><span class="term"><i><tt>deallocFunc</tt></i>:</span></td>
446<td>deallocation function in case of errors</td>
447</tr>
448<tr>
449<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
450<td>the new table or NULL if a memory allocation failed.</td>
451</tr>
452</tbody>
453</table></div>
454</div>
455<hr>
456<div class="refsect2" lang="en">
457<h3>
458<a name="xmlHashCreate"></a>xmlHashCreate ()</h3>
459<pre class="programlisting"><a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a>	xmlHashCreate		(int size)<br>
460</pre>
461<p>Create a new hash table. Set size to zero if the number of entries can't be estimated.</p>
462<div class="variablelist"><table border="0">
463<col align="left">
464<tbody>
465<tr>
466<td><span class="term"><i><tt>size</tt></i>:</span></td>
467<td>initial size of the hash table</td>
468</tr>
469<tr>
470<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
471<td>the newly created object, or NULL if a memory allocation failed.</td>
472</tr>
473</tbody>
474</table></div>
475</div>
476<hr>
477<div class="refsect2" lang="en">
478<h3>
479<a name="xmlHashCreateDict"></a>xmlHashCreateDict ()</h3>
480<pre class="programlisting"><a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a>	xmlHashCreateDict	(int size, <br>					 <a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br>
481</pre>
482<p>Create a new hash table backed by a dictionary. This can reduce resource usage considerably if most keys passed to API functions originate from this dictionary.</p>
483<div class="variablelist"><table border="0">
484<col align="left">
485<tbody>
486<tr>
487<td><span class="term"><i><tt>size</tt></i>:</span></td>
488<td>the size of the hash table</td>
489</tr>
490<tr>
491<td><span class="term"><i><tt>dict</tt></i>:</span></td>
492<td>a dictionary to use for the hash</td>
493</tr>
494<tr>
495<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
496<td>the newly created object, or NULL if a memory allocation failed.</td>
497</tr>
498</tbody>
499</table></div>
500</div>
501<hr>
502<div class="refsect2" lang="en">
503<h3>
504<a name="xmlHashDefaultDeallocator"></a>xmlHashDefaultDeallocator ()</h3>
505<pre class="programlisting">void	xmlHashDefaultDeallocator	(void * entry, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key)<br>
506</pre>
507<p>Free a hash table entry with <a href="libxml2-xmlmemory.html#xmlFree">xmlFree</a>.</p>
508<div class="variablelist"><table border="0">
509<col align="left">
510<tbody>
511<tr>
512<td><span class="term"><i><tt>entry</tt></i>:</span></td>
513<td>hash table entry</td>
514</tr>
515<tr>
516<td><span class="term"><i><tt>key</tt></i>:</span></td>
517<td>the entry's string key</td>
518</tr>
519</tbody>
520</table></div>
521</div>
522<hr>
523<div class="refsect2" lang="en">
524<h3>
525<a name="xmlHashFree"></a>xmlHashFree ()</h3>
526<pre class="programlisting">void	xmlHashFree			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc)<br>
527</pre>
528<p>Free the hash and its contents. The payload is deallocated with @dealloc if provided.</p>
529<div class="variablelist"><table border="0">
530<col align="left">
531<tbody>
532<tr>
533<td><span class="term"><i><tt>hash</tt></i>:</span></td>
534<td>hash table</td>
535</tr>
536<tr>
537<td><span class="term"><i><tt>dealloc</tt></i>:</span></td>
538<td>deallocator function or NULL</td>
539</tr>
540</tbody>
541</table></div>
542</div>
543<hr>
544<div class="refsect2" lang="en">
545<h3>
546<a name="xmlHashLookup"></a>xmlHashLookup ()</h3>
547<pre class="programlisting">void *	xmlHashLookup			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key)<br>
548</pre>
549<p>Find the entry specified by @key.</p>
550<div class="variablelist"><table border="0">
551<col align="left">
552<tbody>
553<tr>
554<td><span class="term"><i><tt>hash</tt></i>:</span></td>
555<td>hash table</td>
556</tr>
557<tr>
558<td><span class="term"><i><tt>key</tt></i>:</span></td>
559<td>string key</td>
560</tr>
561<tr>
562<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
563<td>a pointer to the payload or NULL if no entry was found.</td>
564</tr>
565</tbody>
566</table></div>
567</div>
568<hr>
569<div class="refsect2" lang="en">
570<h3>
571<a name="xmlHashLookup2"></a>xmlHashLookup2 ()</h3>
572<pre class="programlisting">void *	xmlHashLookup2			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2)<br>
573</pre>
574<p>Find the payload specified by the (@key, @key2) tuple.</p>
575<div class="variablelist"><table border="0">
576<col align="left">
577<tbody>
578<tr>
579<td><span class="term"><i><tt>hash</tt></i>:</span></td>
580<td>hash table</td>
581</tr>
582<tr>
583<td><span class="term"><i><tt>key</tt></i>:</span></td>
584<td>first string key</td>
585</tr>
586<tr>
587<td><span class="term"><i><tt>key2</tt></i>:</span></td>
588<td>second string key</td>
589</tr>
590<tr>
591<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
592<td>a pointer to the payload or NULL if no entry was found.</td>
593</tr>
594</tbody>
595</table></div>
596</div>
597<hr>
598<div class="refsect2" lang="en">
599<h3>
600<a name="xmlHashLookup3"></a>xmlHashLookup3 ()</h3>
601<pre class="programlisting">void *	xmlHashLookup3			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3)<br>
602</pre>
603<p>Find the payload specified by the (@key, @key2, @key3) tuple.</p>
604<div class="variablelist"><table border="0">
605<col align="left">
606<tbody>
607<tr>
608<td><span class="term"><i><tt>hash</tt></i>:</span></td>
609<td>hash table</td>
610</tr>
611<tr>
612<td><span class="term"><i><tt>key</tt></i>:</span></td>
613<td>first string key</td>
614</tr>
615<tr>
616<td><span class="term"><i><tt>key2</tt></i>:</span></td>
617<td>second string key</td>
618</tr>
619<tr>
620<td><span class="term"><i><tt>key3</tt></i>:</span></td>
621<td>third string key</td>
622</tr>
623<tr>
624<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
625<td>a pointer to the payload or NULL if no entry was found.</td>
626</tr>
627</tbody>
628</table></div>
629</div>
630<hr>
631<div class="refsect2" lang="en">
632<h3>
633<a name="xmlHashQLookup"></a>xmlHashQLookup ()</h3>
634<pre class="programlisting">void *	xmlHashQLookup			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br>
635</pre>
636<p>Find the payload specified by the QName @prefix:@name or @name.</p>
637<div class="variablelist"><table border="0">
638<col align="left">
639<tbody>
640<tr>
641<td><span class="term"><i><tt>hash</tt></i>:</span></td>
642<td>hash table</td>
643</tr>
644<tr>
645<td><span class="term"><i><tt>prefix</tt></i>:</span></td>
646<td>prefix of the string key</td>
647</tr>
648<tr>
649<td><span class="term"><i><tt>name</tt></i>:</span></td>
650<td>local name of the string key</td>
651</tr>
652<tr>
653<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
654<td>a pointer to the payload or NULL if no entry was found.</td>
655</tr>
656</tbody>
657</table></div>
658</div>
659<hr>
660<div class="refsect2" lang="en">
661<h3>
662<a name="xmlHashQLookup2"></a>xmlHashQLookup2 ()</h3>
663<pre class="programlisting">void *	xmlHashQLookup2			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2)<br>
664</pre>
665<p>Find the payload specified by the QNames tuple.</p>
666<div class="variablelist"><table border="0">
667<col align="left">
668<tbody>
669<tr>
670<td><span class="term"><i><tt>hash</tt></i>:</span></td>
671<td>hash table</td>
672</tr>
673<tr>
674<td><span class="term"><i><tt>prefix</tt></i>:</span></td>
675<td>first prefix</td>
676</tr>
677<tr>
678<td><span class="term"><i><tt>name</tt></i>:</span></td>
679<td>first local name</td>
680</tr>
681<tr>
682<td><span class="term"><i><tt>prefix2</tt></i>:</span></td>
683<td>second prefix</td>
684</tr>
685<tr>
686<td><span class="term"><i><tt>name2</tt></i>:</span></td>
687<td>second local name</td>
688</tr>
689<tr>
690<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
691<td>a pointer to the payload or NULL if no entry was found.</td>
692</tr>
693</tbody>
694</table></div>
695</div>
696<hr>
697<div class="refsect2" lang="en">
698<h3>
699<a name="xmlHashQLookup3"></a>xmlHashQLookup3 ()</h3>
700<pre class="programlisting">void *	xmlHashQLookup3			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix3, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3)<br>
701</pre>
702<p>Find the payload specified by the QNames tuple.</p>
703<div class="variablelist"><table border="0">
704<col align="left">
705<tbody>
706<tr>
707<td><span class="term"><i><tt>hash</tt></i>:</span></td>
708<td>hash table</td>
709</tr>
710<tr>
711<td><span class="term"><i><tt>prefix</tt></i>:</span></td>
712<td>first prefix</td>
713</tr>
714<tr>
715<td><span class="term"><i><tt>name</tt></i>:</span></td>
716<td>first local name</td>
717</tr>
718<tr>
719<td><span class="term"><i><tt>prefix2</tt></i>:</span></td>
720<td>second prefix</td>
721</tr>
722<tr>
723<td><span class="term"><i><tt>name2</tt></i>:</span></td>
724<td>second local name</td>
725</tr>
726<tr>
727<td><span class="term"><i><tt>prefix3</tt></i>:</span></td>
728<td>third prefix</td>
729</tr>
730<tr>
731<td><span class="term"><i><tt>name3</tt></i>:</span></td>
732<td>third local name</td>
733</tr>
734<tr>
735<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
736<td>a pointer to the payload or NULL if no entry was found.</td>
737</tr>
738</tbody>
739</table></div>
740</div>
741<hr>
742<div class="refsect2" lang="en">
743<h3>
744<a name="xmlHashRemoveEntry"></a>xmlHashRemoveEntry ()</h3>
745<pre class="programlisting">int	xmlHashRemoveEntry		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc)<br>
746</pre>
747<p>Find the entry specified by the @key and remove it from the hash table. Payload will be freed with @dealloc.</p>
748<div class="variablelist"><table border="0">
749<col align="left">
750<tbody>
751<tr>
752<td><span class="term"><i><tt>hash</tt></i>:</span></td>
753<td>hash table</td>
754</tr>
755<tr>
756<td><span class="term"><i><tt>key</tt></i>:</span></td>
757<td>string key</td>
758</tr>
759<tr>
760<td><span class="term"><i><tt>dealloc</tt></i>:</span></td>
761<td>deallocator function for removed item or NULL</td>
762</tr>
763<tr>
764<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
765<td>0 on success and -1 if no entry was found.</td>
766</tr>
767</tbody>
768</table></div>
769</div>
770<hr>
771<div class="refsect2" lang="en">
772<h3>
773<a name="xmlHashRemoveEntry2"></a>xmlHashRemoveEntry2 ()</h3>
774<pre class="programlisting">int	xmlHashRemoveEntry2		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc)<br>
775</pre>
776<p>Remove an entry with two strings as key. See <a href="libxml2-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a>.</p>
777<div class="variablelist"><table border="0">
778<col align="left">
779<tbody>
780<tr>
781<td><span class="term"><i><tt>hash</tt></i>:</span></td>
782<td>hash table</td>
783</tr>
784<tr>
785<td><span class="term"><i><tt>key</tt></i>:</span></td>
786<td>first string key</td>
787</tr>
788<tr>
789<td><span class="term"><i><tt>key2</tt></i>:</span></td>
790<td>second string key</td>
791</tr>
792<tr>
793<td><span class="term"><i><tt>dealloc</tt></i>:</span></td>
794<td>deallocator function for removed item or NULL</td>
795</tr>
796<tr>
797<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
798<td>0 on success and -1 in case of error.</td>
799</tr>
800</tbody>
801</table></div>
802</div>
803<hr>
804<div class="refsect2" lang="en">
805<h3>
806<a name="xmlHashRemoveEntry3"></a>xmlHashRemoveEntry3 ()</h3>
807<pre class="programlisting">int	xmlHashRemoveEntry3		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc)<br>
808</pre>
809<p>Remove an entry with three strings as key. See <a href="libxml2-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a>.</p>
810<div class="variablelist"><table border="0">
811<col align="left">
812<tbody>
813<tr>
814<td><span class="term"><i><tt>hash</tt></i>:</span></td>
815<td>hash table</td>
816</tr>
817<tr>
818<td><span class="term"><i><tt>key</tt></i>:</span></td>
819<td>first string key</td>
820</tr>
821<tr>
822<td><span class="term"><i><tt>key2</tt></i>:</span></td>
823<td>second string key</td>
824</tr>
825<tr>
826<td><span class="term"><i><tt>key3</tt></i>:</span></td>
827<td>third string key</td>
828</tr>
829<tr>
830<td><span class="term"><i><tt>dealloc</tt></i>:</span></td>
831<td>deallocator function for removed item or NULL</td>
832</tr>
833<tr>
834<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
835<td>0 on success and -1 in case of error.</td>
836</tr>
837</tbody>
838</table></div>
839</div>
840<hr>
841<div class="refsect2" lang="en">
842<h3>
843<a name="xmlHashScan"></a>xmlHashScan ()</h3>
844<pre class="programlisting">void	xmlHashScan			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 <a href="libxml2-hash.html#xmlHashScanner">xmlHashScanner</a> scan, <br>					 void * data)<br>
845</pre>
846<p>Scan the hash @table and apply @scan to each value.</p>
847<div class="variablelist"><table border="0">
848<col align="left">
849<tbody>
850<tr>
851<td><span class="term"><i><tt>hash</tt></i>:</span></td>
852<td>hash table</td>
853</tr>
854<tr>
855<td><span class="term"><i><tt>scan</tt></i>:</span></td>
856<td>scanner function for items in the hash</td>
857</tr>
858<tr>
859<td><span class="term"><i><tt>data</tt></i>:</span></td>
860<td>extra data passed to @scan</td>
861</tr>
862</tbody>
863</table></div>
864</div>
865<hr>
866<div class="refsect2" lang="en">
867<h3>
868<a name="xmlHashScan3"></a>xmlHashScan3 ()</h3>
869<pre class="programlisting">void	xmlHashScan3			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br>					 <a href="libxml2-hash.html#xmlHashScanner">xmlHashScanner</a> scan, <br>					 void * data)<br>
870</pre>
871<p>Scan the hash @table and apply @scan to each value matching (@key, @key2, @key3) tuple. If one of the keys is null, the comparison is considered to match.</p>
872<div class="variablelist"><table border="0">
873<col align="left">
874<tbody>
875<tr>
876<td><span class="term"><i><tt>hash</tt></i>:</span></td>
877<td>hash table</td>
878</tr>
879<tr>
880<td><span class="term"><i><tt>key</tt></i>:</span></td>
881<td>first string key or NULL</td>
882</tr>
883<tr>
884<td><span class="term"><i><tt>key2</tt></i>:</span></td>
885<td>second string key or NULL</td>
886</tr>
887<tr>
888<td><span class="term"><i><tt>key3</tt></i>:</span></td>
889<td>third string key or NULL</td>
890</tr>
891<tr>
892<td><span class="term"><i><tt>scan</tt></i>:</span></td>
893<td>scanner function for items in the hash</td>
894</tr>
895<tr>
896<td><span class="term"><i><tt>data</tt></i>:</span></td>
897<td>extra data passed to @scan</td>
898</tr>
899</tbody>
900</table></div>
901</div>
902<hr>
903<div class="refsect2" lang="en">
904<h3>
905<a name="xmlHashScanFull"></a>xmlHashScanFull ()</h3>
906<pre class="programlisting">void	xmlHashScanFull			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 <a href="libxml2-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> scan, <br>					 void * data)<br>
907</pre>
908<p>Scan the hash @table and apply @scan to each value.</p>
909<div class="variablelist"><table border="0">
910<col align="left">
911<tbody>
912<tr>
913<td><span class="term"><i><tt>hash</tt></i>:</span></td>
914<td>hash table</td>
915</tr>
916<tr>
917<td><span class="term"><i><tt>scan</tt></i>:</span></td>
918<td>scanner function for items in the hash</td>
919</tr>
920<tr>
921<td><span class="term"><i><tt>data</tt></i>:</span></td>
922<td>extra data passed to @scan</td>
923</tr>
924</tbody>
925</table></div>
926</div>
927<hr>
928<div class="refsect2" lang="en">
929<h3>
930<a name="xmlHashScanFull3"></a>xmlHashScanFull3 ()</h3>
931<pre class="programlisting">void	xmlHashScanFull3		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br>					 <a href="libxml2-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> scan, <br>					 void * data)<br>
932</pre>
933<p>Scan the hash @table and apply @scan to each value matching (@key, @key2, @key3) tuple. If one of the keys is null, the comparison is considered to match.</p>
934<div class="variablelist"><table border="0">
935<col align="left">
936<tbody>
937<tr>
938<td><span class="term"><i><tt>hash</tt></i>:</span></td>
939<td>hash table</td>
940</tr>
941<tr>
942<td><span class="term"><i><tt>key</tt></i>:</span></td>
943<td>first string key or NULL</td>
944</tr>
945<tr>
946<td><span class="term"><i><tt>key2</tt></i>:</span></td>
947<td>second string key or NULL</td>
948</tr>
949<tr>
950<td><span class="term"><i><tt>key3</tt></i>:</span></td>
951<td>third string key or NULL</td>
952</tr>
953<tr>
954<td><span class="term"><i><tt>scan</tt></i>:</span></td>
955<td>scanner function for items in the hash</td>
956</tr>
957<tr>
958<td><span class="term"><i><tt>data</tt></i>:</span></td>
959<td>extra data passed to @scan</td>
960</tr>
961</tbody>
962</table></div>
963</div>
964<hr>
965<div class="refsect2" lang="en">
966<h3>
967<a name="xmlHashSize"></a>xmlHashSize ()</h3>
968<pre class="programlisting">int	xmlHashSize			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash)<br>
969</pre>
970<p>Query the number of elements in the hash table.</p>
971<div class="variablelist"><table border="0">
972<col align="left">
973<tbody>
974<tr>
975<td><span class="term"><i><tt>hash</tt></i>:</span></td>
976<td>hash table</td>
977</tr>
978<tr>
979<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
980<td>the number of elements in the hash table or -1 in case of error.</td>
981</tr>
982</tbody>
983</table></div>
984</div>
985<hr>
986<div class="refsect2" lang="en">
987<h3>
988<a name="xmlHashUpdateEntry"></a>xmlHashUpdateEntry ()</h3>
989<pre class="programlisting">int	xmlHashUpdateEntry		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 void * payload, <br>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc)<br>
990</pre>
991<p>Add a hash table entry. If an entry with this key already exists, the old payload will be freed and updated with the new value.</p>
992<div class="variablelist"><table border="0">
993<col align="left">
994<tbody>
995<tr>
996<td><span class="term"><i><tt>hash</tt></i>:</span></td>
997<td>hash table</td>
998</tr>
999<tr>
1000<td><span class="term"><i><tt>key</tt></i>:</span></td>
1001<td>string key</td>
1002</tr>
1003<tr>
1004<td><span class="term"><i><tt>payload</tt></i>:</span></td>
1005<td>pointer to the payload</td>
1006</tr>
1007<tr>
1008<td><span class="term"><i><tt>dealloc</tt></i>:</span></td>
1009<td>deallocator function for replaced item or NULL</td>
1010</tr>
1011<tr>
1012<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
1013<td>0 in case of success, -1 if a memory allocation failed.</td>
1014</tr>
1015</tbody>
1016</table></div>
1017</div>
1018<hr>
1019<div class="refsect2" lang="en">
1020<h3>
1021<a name="xmlHashUpdateEntry2"></a>xmlHashUpdateEntry2 ()</h3>
1022<pre class="programlisting">int	xmlHashUpdateEntry2		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 void * payload, <br>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc)<br>
1023</pre>
1024<p>Add a hash table entry with two strings as key. See <a href="libxml2-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a>.</p>
1025<div class="variablelist"><table border="0">
1026<col align="left">
1027<tbody>
1028<tr>
1029<td><span class="term"><i><tt>hash</tt></i>:</span></td>
1030<td>hash table</td>
1031</tr>
1032<tr>
1033<td><span class="term"><i><tt>key</tt></i>:</span></td>
1034<td>first string key</td>
1035</tr>
1036<tr>
1037<td><span class="term"><i><tt>key2</tt></i>:</span></td>
1038<td>second string key</td>
1039</tr>
1040<tr>
1041<td><span class="term"><i><tt>payload</tt></i>:</span></td>
1042<td>pointer to the payload</td>
1043</tr>
1044<tr>
1045<td><span class="term"><i><tt>dealloc</tt></i>:</span></td>
1046<td>deallocator function for replaced item or NULL</td>
1047</tr>
1048<tr>
1049<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
1050<td>0 on success and -1 in case of error.</td>
1051</tr>
1052</tbody>
1053</table></div>
1054</div>
1055<hr>
1056<div class="refsect2" lang="en">
1057<h3>
1058<a name="xmlHashUpdateEntry3"></a>xmlHashUpdateEntry3 ()</h3>
1059<pre class="programlisting">int	xmlHashUpdateEntry3		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br>					 void * payload, <br>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc)<br>
1060</pre>
1061<p>Add a hash table entry with three strings as key. See <a href="libxml2-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a>.</p>
1062<div class="variablelist"><table border="0">
1063<col align="left">
1064<tbody>
1065<tr>
1066<td><span class="term"><i><tt>hash</tt></i>:</span></td>
1067<td>hash table</td>
1068</tr>
1069<tr>
1070<td><span class="term"><i><tt>key</tt></i>:</span></td>
1071<td>first string key</td>
1072</tr>
1073<tr>
1074<td><span class="term"><i><tt>key2</tt></i>:</span></td>
1075<td>second string key</td>
1076</tr>
1077<tr>
1078<td><span class="term"><i><tt>key3</tt></i>:</span></td>
1079<td>third string key</td>
1080</tr>
1081<tr>
1082<td><span class="term"><i><tt>payload</tt></i>:</span></td>
1083<td>pointer to the payload</td>
1084</tr>
1085<tr>
1086<td><span class="term"><i><tt>dealloc</tt></i>:</span></td>
1087<td>deallocator function for replaced item or NULL</td>
1088</tr>
1089<tr>
1090<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
1091<td>0 on success and -1 in case of error.</td>
1092</tr>
1093</tbody>
1094</table></div>
1095</div>
1096<hr>
1097</div>
1098</div>
1099</body>
1100</html>
1101