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 <[email protected]> </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 **)(&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