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 <bjorn.reese@systematic.dk> </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="#xmlHashAddEntry">xmlHashAddEntry</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> void * userdata); 29int <a href="#xmlHashAddEntry2">xmlHashAddEntry2</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> void * userdata); 30int <a href="#xmlHashAddEntry3">xmlHashAddEntry3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <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> void * userdata); 31typedef void * <a href="#xmlHashCopier">xmlHashCopier</a> (void * payload, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name); 32<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> <a href="#xmlHashCopy">xmlHashCopy</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> <a href="libxml2-hash.html#xmlHashCopier">xmlHashCopier</a> f); 33<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> <a href="#xmlHashCreate">xmlHashCreate</a> (int size); 34<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); 35typedef void <a href="#xmlHashDeallocator">xmlHashDeallocator</a> (void * payload, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name); 36void <a href="#xmlHashDefaultDeallocator">xmlHashDefaultDeallocator</a> (void * entry, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name); 37void <a href="#xmlHashFree">xmlHashFree</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f); 38void * <a href="#xmlHashLookup">xmlHashLookup</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name); 39void * <a href="#xmlHashLookup2">xmlHashLookup2</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2); 40void * <a href="#xmlHashLookup3">xmlHashLookup3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <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); 41void * <a href="#xmlHashQLookup">xmlHashQLookup</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name); 42void * <a href="#xmlHashQLookup2">xmlHashQLookup2</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <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); 43void * <a href="#xmlHashQLookup3">xmlHashQLookup3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <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); 44int <a href="#xmlHashRemoveEntry">xmlHashRemoveEntry</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f); 45int <a href="#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f); 46int <a href="#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <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> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f); 47void <a href="#xmlHashScan">xmlHashScan</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> <a href="libxml2-hash.html#xmlHashScanner">xmlHashScanner</a> f, <br> void * data); 48void <a href="#xmlHashScan3">xmlHashScan3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <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> <a href="libxml2-hash.html#xmlHashScanner">xmlHashScanner</a> f, <br> void * data); 49void <a href="#xmlHashScanFull">xmlHashScanFull</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> <a href="libxml2-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> f, <br> void * data); 50void <a href="#xmlHashScanFull3">xmlHashScanFull3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <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> <a href="libxml2-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> f, <br> void * data); 51typedef void <a href="#xmlHashScanner">xmlHashScanner</a> (void * payload, <br> void * data, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name); 52typedef 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); 53int <a href="#xmlHashSize">xmlHashSize</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table); 54int <a href="#xmlHashUpdateEntry">xmlHashUpdateEntry</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> void * userdata, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f); 55int <a href="#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> void * userdata, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f); 56int <a href="#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <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> void * userdata, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f); 57</pre> 58</div> 59<div class="refsect1" lang="en"><h2>Description</h2></div> 60<div class="refsect1" lang="en"> 61<h2>Details</h2> 62<div class="refsect2" lang="en"> 63<div class="refsect2" lang="en"> 64<h3> 65<a name="XML_CAST_FPTR">Macro </a>XML_CAST_FPTR</h3> 66<pre class="programlisting">#define <a href="#XML_CAST_FPTR">XML_CAST_FPTR</a>(fptr); 67</pre> 68<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> 69<div class="variablelist"><table border="0"> 70<col align="left"> 71<tbody><tr> 72<td><span class="term"><i><tt>fptr</tt></i>:</span></td> 73<td>pointer to a function</td> 74</tr></tbody> 75</table></div> 76</div> 77<hr> 78<div class="refsect2" lang="en"> 79<h3> 80<a name="xmlHashTable">Structure </a>xmlHashTable</h3> 81<pre class="programlisting">struct _xmlHashTable { 82The content of this structure is not made public by the API. 83} xmlHashTable; 84</pre> 85<p></p> 86</div> 87<hr> 88<div class="refsect2" lang="en"> 89<h3> 90<a name="xmlHashTablePtr">Typedef </a>xmlHashTablePtr</h3> 91<pre class="programlisting"><a href="libxml2-hash.html#xmlHashTable">xmlHashTable</a> * xmlHashTablePtr; 92</pre> 93<p></p> 94</div> 95<hr> 96<div class="refsect2" lang="en"> 97<h3> 98<a name="xmlHashCopier"></a>Function type xmlHashCopier</h3> 99<pre class="programlisting">void * xmlHashCopier (void * payload, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br> 100</pre> 101<p>Callback to copy data from a hash.</p> 102<div class="variablelist"><table border="0"> 103<col align="left"> 104<tbody> 105<tr> 106<td><span class="term"><i><tt>payload</tt></i>:</span></td> 107<td>the data in the hash</td> 108</tr> 109<tr> 110<td><span class="term"><i><tt>name</tt></i>:</span></td> 111<td>the name associated</td> 112</tr> 113<tr> 114<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 115<td>a copy of the data or NULL in case of error.</td> 116</tr> 117</tbody> 118</table></div> 119</div> 120<hr> 121<div class="refsect2" lang="en"> 122<h3> 123<a name="xmlHashDeallocator"></a>Function type xmlHashDeallocator</h3> 124<pre class="programlisting">void xmlHashDeallocator (void * payload, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br> 125</pre> 126<p>Callback to free data from a hash.</p> 127<div class="variablelist"><table border="0"> 128<col align="left"> 129<tbody> 130<tr> 131<td><span class="term"><i><tt>payload</tt></i>:</span></td> 132<td>the data in the hash</td> 133</tr> 134<tr> 135<td><span class="term"><i><tt>name</tt></i>:</span></td> 136<td>the name associated</td> 137</tr> 138</tbody> 139</table></div> 140</div> 141<hr> 142<div class="refsect2" lang="en"> 143<h3> 144<a name="xmlHashScanner"></a>Function type xmlHashScanner</h3> 145<pre class="programlisting">void xmlHashScanner (void * payload, <br> void * data, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br> 146</pre> 147<p>Callback when scanning data in a hash with the simple scanner.</p> 148<div class="variablelist"><table border="0"> 149<col align="left"> 150<tbody> 151<tr> 152<td><span class="term"><i><tt>payload</tt></i>:</span></td> 153<td>the data in the hash</td> 154</tr> 155<tr> 156<td><span class="term"><i><tt>data</tt></i>:</span></td> 157<td>extra scanner data</td> 158</tr> 159<tr> 160<td><span class="term"><i><tt>name</tt></i>:</span></td> 161<td>the name associated</td> 162</tr> 163</tbody> 164</table></div> 165</div> 166<hr> 167<div class="refsect2" lang="en"> 168<h3> 169<a name="xmlHashScannerFull"></a>Function type xmlHashScannerFull</h3> 170<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> 171</pre> 172<p>Callback when scanning data in a hash with the full scanner.</p> 173<div class="variablelist"><table border="0"> 174<col align="left"> 175<tbody> 176<tr> 177<td><span class="term"><i><tt>payload</tt></i>:</span></td> 178<td>the data in the hash</td> 179</tr> 180<tr> 181<td><span class="term"><i><tt>data</tt></i>:</span></td> 182<td>extra scanner data</td> 183</tr> 184<tr> 185<td><span class="term"><i><tt>name</tt></i>:</span></td> 186<td>the name associated</td> 187</tr> 188<tr> 189<td><span class="term"><i><tt>name2</tt></i>:</span></td> 190<td>the second name associated</td> 191</tr> 192<tr> 193<td><span class="term"><i><tt>name3</tt></i>:</span></td> 194<td>the third name associated</td> 195</tr> 196</tbody> 197</table></div> 198</div> 199<hr> 200<div class="refsect2" lang="en"> 201<h3> 202<a name="xmlHashAddEntry"></a>xmlHashAddEntry ()</h3> 203<pre class="programlisting">int xmlHashAddEntry (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> void * userdata)<br> 204</pre> 205<p>Add the @userdata to the hash @table. This can later be retrieved by using the @name. Duplicate names generate errors.</p> 206<div class="variablelist"><table border="0"> 207<col align="left"> 208<tbody> 209<tr> 210<td><span class="term"><i><tt>table</tt></i>:</span></td> 211<td>the hash table</td> 212</tr> 213<tr> 214<td><span class="term"><i><tt>name</tt></i>:</span></td> 215<td>the name of the userdata</td> 216</tr> 217<tr> 218<td><span class="term"><i><tt>userdata</tt></i>:</span></td> 219<td>a pointer to the userdata</td> 220</tr> 221<tr> 222<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 223<td>0 the addition succeeded and -1 in case of error.</td> 224</tr> 225</tbody> 226</table></div> 227</div> 228<hr> 229<div class="refsect2" lang="en"> 230<h3> 231<a name="xmlHashAddEntry2"></a>xmlHashAddEntry2 ()</h3> 232<pre class="programlisting">int xmlHashAddEntry2 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> void * userdata)<br> 233</pre> 234<p>Add the @userdata to the hash @table. This can later be retrieved by using the (@name, @name2) tuple. Duplicate tuples generate errors.</p> 235<div class="variablelist"><table border="0"> 236<col align="left"> 237<tbody> 238<tr> 239<td><span class="term"><i><tt>table</tt></i>:</span></td> 240<td>the hash table</td> 241</tr> 242<tr> 243<td><span class="term"><i><tt>name</tt></i>:</span></td> 244<td>the name of the userdata</td> 245</tr> 246<tr> 247<td><span class="term"><i><tt>name2</tt></i>:</span></td> 248<td>a second name of the userdata</td> 249</tr> 250<tr> 251<td><span class="term"><i><tt>userdata</tt></i>:</span></td> 252<td>a pointer to the userdata</td> 253</tr> 254<tr> 255<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 256<td>0 the addition succeeded and -1 in case of error.</td> 257</tr> 258</tbody> 259</table></div> 260</div> 261<hr> 262<div class="refsect2" lang="en"> 263<h3> 264<a name="xmlHashAddEntry3"></a>xmlHashAddEntry3 ()</h3> 265<pre class="programlisting">int xmlHashAddEntry3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <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> void * userdata)<br> 266</pre> 267<p>Add the @userdata to the hash @table. This can later be retrieved by using the tuple (@name, @name2, @name3). Duplicate entries generate errors.</p> 268<div class="variablelist"><table border="0"> 269<col align="left"> 270<tbody> 271<tr> 272<td><span class="term"><i><tt>table</tt></i>:</span></td> 273<td>the hash table</td> 274</tr> 275<tr> 276<td><span class="term"><i><tt>name</tt></i>:</span></td> 277<td>the name of the userdata</td> 278</tr> 279<tr> 280<td><span class="term"><i><tt>name2</tt></i>:</span></td> 281<td>a second name of the userdata</td> 282</tr> 283<tr> 284<td><span class="term"><i><tt>name3</tt></i>:</span></td> 285<td>a third name of the userdata</td> 286</tr> 287<tr> 288<td><span class="term"><i><tt>userdata</tt></i>:</span></td> 289<td>a pointer to the userdata</td> 290</tr> 291<tr> 292<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 293<td>0 the addition succeeded and -1 in case of error.</td> 294</tr> 295</tbody> 296</table></div> 297</div> 298<hr> 299<div class="refsect2" lang="en"> 300<h3> 301<a name="xmlHashCopy"></a>xmlHashCopy ()</h3> 302<pre class="programlisting"><a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> xmlHashCopy (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> <a href="libxml2-hash.html#xmlHashCopier">xmlHashCopier</a> f)<br> 303</pre> 304<p>Scan the hash @table and applied @f to each value.</p> 305<div class="variablelist"><table border="0"> 306<col align="left"> 307<tbody> 308<tr> 309<td><span class="term"><i><tt>table</tt></i>:</span></td> 310<td>the hash table</td> 311</tr> 312<tr> 313<td><span class="term"><i><tt>f</tt></i>:</span></td> 314<td>the copier function for items in the hash</td> 315</tr> 316<tr> 317<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 318<td>the new table or NULL in case of error.</td> 319</tr> 320</tbody> 321</table></div> 322</div> 323<hr> 324<div class="refsect2" lang="en"> 325<h3> 326<a name="xmlHashCreate"></a>xmlHashCreate ()</h3> 327<pre class="programlisting"><a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> xmlHashCreate (int size)<br> 328</pre> 329<p>Create a new <a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a>.</p> 330<div class="variablelist"><table border="0"> 331<col align="left"> 332<tbody> 333<tr> 334<td><span class="term"><i><tt>size</tt></i>:</span></td> 335<td>the size of the hash table</td> 336</tr> 337<tr> 338<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 339<td>the newly created object, or NULL if an error occurred.</td> 340</tr> 341</tbody> 342</table></div> 343</div> 344<hr> 345<div class="refsect2" lang="en"> 346<h3> 347<a name="xmlHashCreateDict"></a>xmlHashCreateDict ()</h3> 348<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> 349</pre> 350<p>Create a new <a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> which will use @dict as the internal dictionary</p> 351<div class="variablelist"><table border="0"> 352<col align="left"> 353<tbody> 354<tr> 355<td><span class="term"><i><tt>size</tt></i>:</span></td> 356<td>the size of the hash table</td> 357</tr> 358<tr> 359<td><span class="term"><i><tt>dict</tt></i>:</span></td> 360<td>a dictionary to use for the hash</td> 361</tr> 362<tr> 363<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 364<td>the newly created object, or NULL if an error occurred.</td> 365</tr> 366</tbody> 367</table></div> 368</div> 369<hr> 370<div class="refsect2" lang="en"> 371<h3> 372<a name="xmlHashDefaultDeallocator"></a>xmlHashDefaultDeallocator ()</h3> 373<pre class="programlisting">void xmlHashDefaultDeallocator (void * entry, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br> 374</pre> 375<p>Free a hash table entry with <a href="libxml2-globals.html#xmlFree">xmlFree</a>.</p> 376<div class="variablelist"><table border="0"> 377<col align="left"> 378<tbody> 379<tr> 380<td><span class="term"><i><tt>entry</tt></i>:</span></td> 381<td>the hash table entry</td> 382</tr> 383<tr> 384<td><span class="term"><i><tt>name</tt></i>:</span></td> 385<td>the entry's name</td> 386</tr> 387</tbody> 388</table></div> 389</div> 390<hr> 391<div class="refsect2" lang="en"> 392<h3> 393<a name="xmlHashFree"></a>xmlHashFree ()</h3> 394<pre class="programlisting">void xmlHashFree (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br> 395</pre> 396<p>Free the hash @table and its contents. The userdata is deallocated with @f if provided.</p> 397<div class="variablelist"><table border="0"> 398<col align="left"> 399<tbody> 400<tr> 401<td><span class="term"><i><tt>table</tt></i>:</span></td> 402<td>the hash table</td> 403</tr> 404<tr> 405<td><span class="term"><i><tt>f</tt></i>:</span></td> 406<td>the deallocator function for items in the hash</td> 407</tr> 408</tbody> 409</table></div> 410</div> 411<hr> 412<div class="refsect2" lang="en"> 413<h3> 414<a name="xmlHashLookup"></a>xmlHashLookup ()</h3> 415<pre class="programlisting">void * xmlHashLookup (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br> 416</pre> 417<p>Find the userdata specified by the @name.</p> 418<div class="variablelist"><table border="0"> 419<col align="left"> 420<tbody> 421<tr> 422<td><span class="term"><i><tt>table</tt></i>:</span></td> 423<td>the hash table</td> 424</tr> 425<tr> 426<td><span class="term"><i><tt>name</tt></i>:</span></td> 427<td>the name of the userdata</td> 428</tr> 429<tr> 430<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 431<td>the pointer to the userdata</td> 432</tr> 433</tbody> 434</table></div> 435</div> 436<hr> 437<div class="refsect2" lang="en"> 438<h3> 439<a name="xmlHashLookup2"></a>xmlHashLookup2 ()</h3> 440<pre class="programlisting">void * xmlHashLookup2 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2)<br> 441</pre> 442<p>Find the userdata specified by the (@name, @name2) tuple.</p> 443<div class="variablelist"><table border="0"> 444<col align="left"> 445<tbody> 446<tr> 447<td><span class="term"><i><tt>table</tt></i>:</span></td> 448<td>the hash table</td> 449</tr> 450<tr> 451<td><span class="term"><i><tt>name</tt></i>:</span></td> 452<td>the name of the userdata</td> 453</tr> 454<tr> 455<td><span class="term"><i><tt>name2</tt></i>:</span></td> 456<td>a second name of the userdata</td> 457</tr> 458<tr> 459<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 460<td>the pointer to the userdata</td> 461</tr> 462</tbody> 463</table></div> 464</div> 465<hr> 466<div class="refsect2" lang="en"> 467<h3> 468<a name="xmlHashLookup3"></a>xmlHashLookup3 ()</h3> 469<pre class="programlisting">void * xmlHashLookup3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <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> 470</pre> 471<p>Find the userdata specified by the (@name, @name2, @name3) tuple.</p> 472<div class="variablelist"><table border="0"> 473<col align="left"> 474<tbody> 475<tr> 476<td><span class="term"><i><tt>table</tt></i>:</span></td> 477<td>the hash table</td> 478</tr> 479<tr> 480<td><span class="term"><i><tt>name</tt></i>:</span></td> 481<td>the name of the userdata</td> 482</tr> 483<tr> 484<td><span class="term"><i><tt>name2</tt></i>:</span></td> 485<td>a second name of the userdata</td> 486</tr> 487<tr> 488<td><span class="term"><i><tt>name3</tt></i>:</span></td> 489<td>a third name of the userdata</td> 490</tr> 491<tr> 492<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 493<td>the a pointer to the userdata</td> 494</tr> 495</tbody> 496</table></div> 497</div> 498<hr> 499<div class="refsect2" lang="en"> 500<h3> 501<a name="xmlHashQLookup"></a>xmlHashQLookup ()</h3> 502<pre class="programlisting">void * xmlHashQLookup (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br> 503</pre> 504<p>Find the userdata specified by the QName @prefix:@name/@name.</p> 505<div class="variablelist"><table border="0"> 506<col align="left"> 507<tbody> 508<tr> 509<td><span class="term"><i><tt>table</tt></i>:</span></td> 510<td>the hash table</td> 511</tr> 512<tr> 513<td><span class="term"><i><tt>prefix</tt></i>:</span></td> 514<td>the prefix of the userdata</td> 515</tr> 516<tr> 517<td><span class="term"><i><tt>name</tt></i>:</span></td> 518<td>the name of the userdata</td> 519</tr> 520<tr> 521<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 522<td>the pointer to the userdata</td> 523</tr> 524</tbody> 525</table></div> 526</div> 527<hr> 528<div class="refsect2" lang="en"> 529<h3> 530<a name="xmlHashQLookup2"></a>xmlHashQLookup2 ()</h3> 531<pre class="programlisting">void * xmlHashQLookup2 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <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> 532</pre> 533<p>Find the userdata specified by the QNames tuple</p> 534<div class="variablelist"><table border="0"> 535<col align="left"> 536<tbody> 537<tr> 538<td><span class="term"><i><tt>table</tt></i>:</span></td> 539<td>the hash table</td> 540</tr> 541<tr> 542<td><span class="term"><i><tt>prefix</tt></i>:</span></td> 543<td>the prefix of the userdata</td> 544</tr> 545<tr> 546<td><span class="term"><i><tt>name</tt></i>:</span></td> 547<td>the name of the userdata</td> 548</tr> 549<tr> 550<td><span class="term"><i><tt>prefix2</tt></i>:</span></td> 551<td>the second prefix of the userdata</td> 552</tr> 553<tr> 554<td><span class="term"><i><tt>name2</tt></i>:</span></td> 555<td>a second name of the userdata</td> 556</tr> 557<tr> 558<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 559<td>the pointer to the userdata</td> 560</tr> 561</tbody> 562</table></div> 563</div> 564<hr> 565<div class="refsect2" lang="en"> 566<h3> 567<a name="xmlHashQLookup3"></a>xmlHashQLookup3 ()</h3> 568<pre class="programlisting">void * xmlHashQLookup3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <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> 569</pre> 570<p>Find the userdata specified by the (@name, @name2, @name3) tuple.</p> 571<div class="variablelist"><table border="0"> 572<col align="left"> 573<tbody> 574<tr> 575<td><span class="term"><i><tt>table</tt></i>:</span></td> 576<td>the hash table</td> 577</tr> 578<tr> 579<td><span class="term"><i><tt>prefix</tt></i>:</span></td> 580<td>the prefix of the userdata</td> 581</tr> 582<tr> 583<td><span class="term"><i><tt>name</tt></i>:</span></td> 584<td>the name of the userdata</td> 585</tr> 586<tr> 587<td><span class="term"><i><tt>prefix2</tt></i>:</span></td> 588<td>the second prefix of the userdata</td> 589</tr> 590<tr> 591<td><span class="term"><i><tt>name2</tt></i>:</span></td> 592<td>a second name of the userdata</td> 593</tr> 594<tr> 595<td><span class="term"><i><tt>prefix3</tt></i>:</span></td> 596<td>the third prefix of the userdata</td> 597</tr> 598<tr> 599<td><span class="term"><i><tt>name3</tt></i>:</span></td> 600<td>a third name of the userdata</td> 601</tr> 602<tr> 603<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 604<td>the a pointer to the userdata</td> 605</tr> 606</tbody> 607</table></div> 608</div> 609<hr> 610<div class="refsect2" lang="en"> 611<h3> 612<a name="xmlHashRemoveEntry"></a>xmlHashRemoveEntry ()</h3> 613<pre class="programlisting">int xmlHashRemoveEntry (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br> 614</pre> 615<p>Find the userdata specified by the @name and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.</p> 616<div class="variablelist"><table border="0"> 617<col align="left"> 618<tbody> 619<tr> 620<td><span class="term"><i><tt>table</tt></i>:</span></td> 621<td>the hash table</td> 622</tr> 623<tr> 624<td><span class="term"><i><tt>name</tt></i>:</span></td> 625<td>the name of the userdata</td> 626</tr> 627<tr> 628<td><span class="term"><i><tt>f</tt></i>:</span></td> 629<td>the deallocator function for removed item (if any)</td> 630</tr> 631<tr> 632<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 633<td>0 if the removal succeeded and -1 in case of error or not found.</td> 634</tr> 635</tbody> 636</table></div> 637</div> 638<hr> 639<div class="refsect2" lang="en"> 640<h3> 641<a name="xmlHashRemoveEntry2"></a>xmlHashRemoveEntry2 ()</h3> 642<pre class="programlisting">int xmlHashRemoveEntry2 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br> 643</pre> 644<p>Find the userdata specified by the (@name, @name2) tuple and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.</p> 645<div class="variablelist"><table border="0"> 646<col align="left"> 647<tbody> 648<tr> 649<td><span class="term"><i><tt>table</tt></i>:</span></td> 650<td>the hash table</td> 651</tr> 652<tr> 653<td><span class="term"><i><tt>name</tt></i>:</span></td> 654<td>the name of the userdata</td> 655</tr> 656<tr> 657<td><span class="term"><i><tt>name2</tt></i>:</span></td> 658<td>a second name of the userdata</td> 659</tr> 660<tr> 661<td><span class="term"><i><tt>f</tt></i>:</span></td> 662<td>the deallocator function for removed item (if any)</td> 663</tr> 664<tr> 665<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 666<td>0 if the removal succeeded and -1 in case of error or not found.</td> 667</tr> 668</tbody> 669</table></div> 670</div> 671<hr> 672<div class="refsect2" lang="en"> 673<h3> 674<a name="xmlHashRemoveEntry3"></a>xmlHashRemoveEntry3 ()</h3> 675<pre class="programlisting">int xmlHashRemoveEntry3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <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> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br> 676</pre> 677<p>Find the userdata specified by the (@name, @name2, @name3) tuple and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.</p> 678<div class="variablelist"><table border="0"> 679<col align="left"> 680<tbody> 681<tr> 682<td><span class="term"><i><tt>table</tt></i>:</span></td> 683<td>the hash table</td> 684</tr> 685<tr> 686<td><span class="term"><i><tt>name</tt></i>:</span></td> 687<td>the name of the userdata</td> 688</tr> 689<tr> 690<td><span class="term"><i><tt>name2</tt></i>:</span></td> 691<td>a second name of the userdata</td> 692</tr> 693<tr> 694<td><span class="term"><i><tt>name3</tt></i>:</span></td> 695<td>a third name of the userdata</td> 696</tr> 697<tr> 698<td><span class="term"><i><tt>f</tt></i>:</span></td> 699<td>the deallocator function for removed item (if any)</td> 700</tr> 701<tr> 702<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 703<td>0 if the removal succeeded and -1 in case of error or not found.</td> 704</tr> 705</tbody> 706</table></div> 707</div> 708<hr> 709<div class="refsect2" lang="en"> 710<h3> 711<a name="xmlHashScan"></a>xmlHashScan ()</h3> 712<pre class="programlisting">void xmlHashScan (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> <a href="libxml2-hash.html#xmlHashScanner">xmlHashScanner</a> f, <br> void * data)<br> 713</pre> 714<p>Scan the hash @table and applied @f to each value.</p> 715<div class="variablelist"><table border="0"> 716<col align="left"> 717<tbody> 718<tr> 719<td><span class="term"><i><tt>table</tt></i>:</span></td> 720<td>the hash table</td> 721</tr> 722<tr> 723<td><span class="term"><i><tt>f</tt></i>:</span></td> 724<td>the scanner function for items in the hash</td> 725</tr> 726<tr> 727<td><span class="term"><i><tt>data</tt></i>:</span></td> 728<td>extra data passed to f</td> 729</tr> 730</tbody> 731</table></div> 732</div> 733<hr> 734<div class="refsect2" lang="en"> 735<h3> 736<a name="xmlHashScan3"></a>xmlHashScan3 ()</h3> 737<pre class="programlisting">void xmlHashScan3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <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> <a href="libxml2-hash.html#xmlHashScanner">xmlHashScanner</a> f, <br> void * data)<br> 738</pre> 739<p>Scan the hash @table and applied @f to each value matching (@name, @name2, @name3) tuple. If one of the names is null, the comparison is considered to match.</p> 740<div class="variablelist"><table border="0"> 741<col align="left"> 742<tbody> 743<tr> 744<td><span class="term"><i><tt>table</tt></i>:</span></td> 745<td>the hash table</td> 746</tr> 747<tr> 748<td><span class="term"><i><tt>name</tt></i>:</span></td> 749<td>the name of the userdata or NULL</td> 750</tr> 751<tr> 752<td><span class="term"><i><tt>name2</tt></i>:</span></td> 753<td>a second name of the userdata or NULL</td> 754</tr> 755<tr> 756<td><span class="term"><i><tt>name3</tt></i>:</span></td> 757<td>a third name of the userdata or NULL</td> 758</tr> 759<tr> 760<td><span class="term"><i><tt>f</tt></i>:</span></td> 761<td>the scanner function for items in the hash</td> 762</tr> 763<tr> 764<td><span class="term"><i><tt>data</tt></i>:</span></td> 765<td>extra data passed to f</td> 766</tr> 767</tbody> 768</table></div> 769</div> 770<hr> 771<div class="refsect2" lang="en"> 772<h3> 773<a name="xmlHashScanFull"></a>xmlHashScanFull ()</h3> 774<pre class="programlisting">void xmlHashScanFull (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> <a href="libxml2-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> f, <br> void * data)<br> 775</pre> 776<p>Scan the hash @table and applied @f to each value.</p> 777<div class="variablelist"><table border="0"> 778<col align="left"> 779<tbody> 780<tr> 781<td><span class="term"><i><tt>table</tt></i>:</span></td> 782<td>the hash table</td> 783</tr> 784<tr> 785<td><span class="term"><i><tt>f</tt></i>:</span></td> 786<td>the scanner function for items in the hash</td> 787</tr> 788<tr> 789<td><span class="term"><i><tt>data</tt></i>:</span></td> 790<td>extra data passed to f</td> 791</tr> 792</tbody> 793</table></div> 794</div> 795<hr> 796<div class="refsect2" lang="en"> 797<h3> 798<a name="xmlHashScanFull3"></a>xmlHashScanFull3 ()</h3> 799<pre class="programlisting">void xmlHashScanFull3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <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> <a href="libxml2-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> f, <br> void * data)<br> 800</pre> 801<p>Scan the hash @table and applied @f to each value matching (@name, @name2, @name3) tuple. If one of the names is null, the comparison is considered to match.</p> 802<div class="variablelist"><table border="0"> 803<col align="left"> 804<tbody> 805<tr> 806<td><span class="term"><i><tt>table</tt></i>:</span></td> 807<td>the hash table</td> 808</tr> 809<tr> 810<td><span class="term"><i><tt>name</tt></i>:</span></td> 811<td>the name of the userdata or NULL</td> 812</tr> 813<tr> 814<td><span class="term"><i><tt>name2</tt></i>:</span></td> 815<td>a second name of the userdata or NULL</td> 816</tr> 817<tr> 818<td><span class="term"><i><tt>name3</tt></i>:</span></td> 819<td>a third name of the userdata or NULL</td> 820</tr> 821<tr> 822<td><span class="term"><i><tt>f</tt></i>:</span></td> 823<td>the scanner function for items in the hash</td> 824</tr> 825<tr> 826<td><span class="term"><i><tt>data</tt></i>:</span></td> 827<td>extra data passed to f</td> 828</tr> 829</tbody> 830</table></div> 831</div> 832<hr> 833<div class="refsect2" lang="en"> 834<h3> 835<a name="xmlHashSize"></a>xmlHashSize ()</h3> 836<pre class="programlisting">int xmlHashSize (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table)<br> 837</pre> 838<p>Query the number of elements installed in the hash @table.</p> 839<div class="variablelist"><table border="0"> 840<col align="left"> 841<tbody> 842<tr> 843<td><span class="term"><i><tt>table</tt></i>:</span></td> 844<td>the hash table</td> 845</tr> 846<tr> 847<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 848<td>the number of elements in the hash table or -1 in case of error</td> 849</tr> 850</tbody> 851</table></div> 852</div> 853<hr> 854<div class="refsect2" lang="en"> 855<h3> 856<a name="xmlHashUpdateEntry"></a>xmlHashUpdateEntry ()</h3> 857<pre class="programlisting">int xmlHashUpdateEntry (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> void * userdata, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br> 858</pre> 859<p>Add the @userdata to the hash @table. This can later be retrieved by using the @name. Existing entry for this @name will be removed and freed with @f if found.</p> 860<div class="variablelist"><table border="0"> 861<col align="left"> 862<tbody> 863<tr> 864<td><span class="term"><i><tt>table</tt></i>:</span></td> 865<td>the hash table</td> 866</tr> 867<tr> 868<td><span class="term"><i><tt>name</tt></i>:</span></td> 869<td>the name of the userdata</td> 870</tr> 871<tr> 872<td><span class="term"><i><tt>userdata</tt></i>:</span></td> 873<td>a pointer to the userdata</td> 874</tr> 875<tr> 876<td><span class="term"><i><tt>f</tt></i>:</span></td> 877<td>the deallocator function for replaced item (if any)</td> 878</tr> 879<tr> 880<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 881<td>0 the addition succeeded and -1 in case of error.</td> 882</tr> 883</tbody> 884</table></div> 885</div> 886<hr> 887<div class="refsect2" lang="en"> 888<h3> 889<a name="xmlHashUpdateEntry2"></a>xmlHashUpdateEntry2 ()</h3> 890<pre class="programlisting">int xmlHashUpdateEntry2 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> void * userdata, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br> 891</pre> 892<p>Add the @userdata to the hash @table. This can later be retrieved by using the (@name, @name2) tuple. Existing entry for this tuple will be removed and freed with @f if found.</p> 893<div class="variablelist"><table border="0"> 894<col align="left"> 895<tbody> 896<tr> 897<td><span class="term"><i><tt>table</tt></i>:</span></td> 898<td>the hash table</td> 899</tr> 900<tr> 901<td><span class="term"><i><tt>name</tt></i>:</span></td> 902<td>the name of the userdata</td> 903</tr> 904<tr> 905<td><span class="term"><i><tt>name2</tt></i>:</span></td> 906<td>a second name of the userdata</td> 907</tr> 908<tr> 909<td><span class="term"><i><tt>userdata</tt></i>:</span></td> 910<td>a pointer to the userdata</td> 911</tr> 912<tr> 913<td><span class="term"><i><tt>f</tt></i>:</span></td> 914<td>the deallocator function for replaced item (if any)</td> 915</tr> 916<tr> 917<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 918<td>0 the addition succeeded and -1 in case of error.</td> 919</tr> 920</tbody> 921</table></div> 922</div> 923<hr> 924<div class="refsect2" lang="en"> 925<h3> 926<a name="xmlHashUpdateEntry3"></a>xmlHashUpdateEntry3 ()</h3> 927<pre class="programlisting">int xmlHashUpdateEntry3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <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> void * userdata, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br> 928</pre> 929<p>Add the @userdata to the hash @table. This can later be retrieved by using the tuple (@name, @name2, @name3). Existing entry for this tuple will be removed and freed with @f if found.</p> 930<div class="variablelist"><table border="0"> 931<col align="left"> 932<tbody> 933<tr> 934<td><span class="term"><i><tt>table</tt></i>:</span></td> 935<td>the hash table</td> 936</tr> 937<tr> 938<td><span class="term"><i><tt>name</tt></i>:</span></td> 939<td>the name of the userdata</td> 940</tr> 941<tr> 942<td><span class="term"><i><tt>name2</tt></i>:</span></td> 943<td>a second name of the userdata</td> 944</tr> 945<tr> 946<td><span class="term"><i><tt>name3</tt></i>:</span></td> 947<td>a third name of the userdata</td> 948</tr> 949<tr> 950<td><span class="term"><i><tt>userdata</tt></i>:</span></td> 951<td>a pointer to the userdata</td> 952</tr> 953<tr> 954<td><span class="term"><i><tt>f</tt></i>:</span></td> 955<td>the deallocator function for replaced item (if any)</td> 956</tr> 957<tr> 958<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 959<td>0 the addition succeeded and -1 in case of error.</td> 960</tr> 961</tbody> 962</table></div> 963</div> 964<hr> 965</div> 966</div> 967</body> 968</html> 969