Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 550bbe86d83a7870fdddc73c68e5d2b2 > files > 198

libunbound-devel-1.3.4-1mdv2010.0.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>unbound: util/storage/lruhash.c File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.9 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="dirs.html"><span>Directories</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
  <div class="navpath"><a class="el" href="dir_4b581c88b01efb1cf178857b56f0f2fb.html">util</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_503386e5bff39eee21df0f1f4756eaa4.html">storage</a>
  </div>
</div>
<div class="contents">
<h1>lruhash.c File Reference</h1>This file contains a hashtable with LRU keeping of entries.  
<a href="#_details">More...</a>
<p>
<code>#include &quot;config.h&quot;</code><br>
<code>#include &quot;<a class="el" href="lruhash_8h.html">util/storage/lruhash.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="fptr__wlist_8h.html">util/fptr_wlist.h</a>&quot;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="49ee4d5e5eac6bf209f3f8a83365b29c"></a><!-- doxytag: member="lruhash.c::bin_init" ref="49ee4d5e5eac6bf209f3f8a83365b29c" args="(struct lruhash_bin *array, size_t size)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#49ee4d5e5eac6bf209f3f8a83365b29c">bin_init</a> (struct <a class="el" href="structlruhash__bin.html">lruhash_bin</a> *array, size_t size)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">init the hash bins for the table <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlruhash.html">lruhash</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#926d61f93c89b0256e5ca1f8e656940c">lruhash_create</a> (size_t start_size, size_t maxmem, <a class="el" href="lruhash_8h.html#d1958b168b133c03a0d17ab811dbfe88">lruhash_sizefunc_t</a> sizefunc, <a class="el" href="lruhash_8h.html#68ffdb68cd2e0aafa404fe152670b171">lruhash_compfunc_t</a> compfunc, <a class="el" href="lruhash_8h.html#f571f96f363df9310562c7b49fab9b16">lruhash_delkeyfunc_t</a> delkeyfunc, <a class="el" href="lruhash_8h.html#3ae4e4bd0bff228eaa1c094e4db7774a">lruhash_deldatafunc_t</a> deldatafunc, void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create new hash table.  <a href="#926d61f93c89b0256e5ca1f8e656940c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="47ca829d84d3d4756122cd01b9ce8fbf"></a><!-- doxytag: member="lruhash.c::bin_delete" ref="47ca829d84d3d4756122cd01b9ce8fbf" args="(struct lruhash *table, struct lruhash_bin *bin)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#47ca829d84d3d4756122cd01b9ce8fbf">bin_delete</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *table, struct <a class="el" href="structlruhash__bin.html">lruhash_bin</a> *bin)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">delete the hash bin and entries inside it <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#dfe7a9a6b52cde80b177acd0c0f3ece8">bin_split</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *table, struct <a class="el" href="structlruhash__bin.html">lruhash_bin</a> *newa, int newmask)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Split hash bin into two new ones.  <a href="#dfe7a9a6b52cde80b177acd0c0f3ece8"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#91b01efd8c80b4061a08408adb7c50fa">lruhash_delete</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *table)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delete hash table.  <a href="#91b01efd8c80b4061a08408adb7c50fa"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#30828dda746ea00e95ac86b5a204df01">bin_overflow_remove</a> (struct <a class="el" href="structlruhash__bin.html">lruhash_bin</a> *bin, struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *<a class="el" href="structentry.html">entry</a>)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> from bin overflow chain.  <a href="#30828dda746ea00e95ac86b5a204df01"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#af9d7b32aa0703f22d4ce9a459b69c91">reclaim_space</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *table, struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> **list)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Try to make space available by deleting old entries.  <a href="#af9d7b32aa0703f22d4ce9a459b69c91"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#5d4e727ad2bda151d2afc1b9ac0c8815">bin_find_entry</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *table, struct <a class="el" href="structlruhash__bin.html">lruhash_bin</a> *bin, <a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> hash, void *key)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Find <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> in hash bin.  <a href="#5d4e727ad2bda151d2afc1b9ac0c8815"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#10fafade8d45ec1e641a9ef22e198399">table_grow</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *table)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Grow the table lookup array.  <a href="#10fafade8d45ec1e641a9ef22e198399"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#b4665971a9eb38d5b3d61e9f67771627">lru_front</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *table, struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *<a class="el" href="structentry.html">entry</a>)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Put <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> at front of lru.  <a href="#b4665971a9eb38d5b3d61e9f67771627"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#dfd80fb9c83d63b7533cf1a20eecff95">lru_remove</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *table, struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *<a class="el" href="structentry.html">entry</a>)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> from lru list.  <a href="#dfd80fb9c83d63b7533cf1a20eecff95"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#271faf162f5d23025ca236b1fdb9e3e5">lru_touch</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *table, struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *<a class="el" href="structentry.html">entry</a>)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Touch <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>, so it becomes the most recently used in the LRU list.  <a href="#271faf162f5d23025ca236b1fdb9e3e5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#3200b8f0d2e2bc6d62b34aa284f5225d">lruhash_insert</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *table, <a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> hash, struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *<a class="el" href="structentry.html">entry</a>, void *data, void *cb_arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Insert a new element into the hashtable.  <a href="#3200b8f0d2e2bc6d62b34aa284f5225d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#bdba9cbf079f9255e49b53f7d9804661">lruhash_lookup</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *table, <a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> hash, void *key, int wr)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Lookup an <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> in the hashtable.  <a href="#bdba9cbf079f9255e49b53f7d9804661"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#eda7529dfac9933fdae541333346209d">lruhash_remove</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *table, <a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> hash, void *key)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> from hashtable.  <a href="#eda7529dfac9933fdae541333346209d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9865fa8f7cae28c75267fc6fbe17aeec"></a><!-- doxytag: member="lruhash.c::bin_clear" ref="9865fa8f7cae28c75267fc6fbe17aeec" args="(struct lruhash *table, struct lruhash_bin *bin)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#9865fa8f7cae28c75267fc6fbe17aeec">bin_clear</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *table, struct <a class="el" href="structlruhash__bin.html">lruhash_bin</a> *bin)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">clear bin, respecting locks, does not do space, LRU <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#e170ef01dc4b5fb932335aacfe4976a0">lruhash_clear</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *table)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clear hash table.  <a href="#e170ef01dc4b5fb932335aacfe4976a0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#1843ea95152efc257e96814bc7eb0dc0">lruhash_status</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *table, const char *id, int extended)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Output debug info to the log as to state of the hash table.  <a href="#1843ea95152efc257e96814bc7eb0dc0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#2a345f99507b392bb63f7294fab05ca3">lruhash_get_mem</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *table)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get memory in use now by the <a class="el" href="structlruhash.html" title="Hash table that keeps LRU list of entries.">lruhash</a> table.  <a href="#2a345f99507b392bb63f7294fab05ca3"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3b2ade2a6264497fda1ed719ace92c39"></a><!-- doxytag: member="lruhash.c::lruhash_setmarkdel" ref="3b2ade2a6264497fda1ed719ace92c39" args="(struct lruhash *table, lruhash_markdelfunc_t md)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#3b2ade2a6264497fda1ed719ace92c39">lruhash_setmarkdel</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *table, <a class="el" href="lruhash_8h.html#b66fdcecf0922f195c9588ef39b2d4d0">lruhash_markdelfunc_t</a> md)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the markdelfunction (or NULL). <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="lruhash_8c.html#4f4509a9e30f7ba912b260e5e2685088">lruhash_traverse</a> (struct <a class="el" href="structlruhash.html">lruhash</a> *h, int wr, void(*func)(struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *, void *), void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Traverse a <a class="el" href="structlruhash.html" title="Hash table that keeps LRU list of entries.">lruhash</a>.  <a href="#4f4509a9e30f7ba912b260e5e2685088"></a><br></td></tr>
</table>
<hr><h2>Detailed Description</h2>
This file contains a hashtable with LRU keeping of entries. 
<p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="926d61f93c89b0256e5ca1f8e656940c"></a><!-- doxytag: member="lruhash.c::lruhash_create" ref="926d61f93c89b0256e5ca1f8e656940c" args="(size_t start_size, size_t maxmem, lruhash_sizefunc_t sizefunc, lruhash_compfunc_t compfunc, lruhash_delkeyfunc_t delkeyfunc, lruhash_deldatafunc_t deldatafunc, void *arg)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structlruhash.html">lruhash</a>* lruhash_create           </td>
          <td>(</td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>start_size</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>maxmem</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#d1958b168b133c03a0d17ab811dbfe88">lruhash_sizefunc_t</a>&nbsp;</td>
          <td class="paramname"> <em>sizefunc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#68ffdb68cd2e0aafa404fe152670b171">lruhash_compfunc_t</a>&nbsp;</td>
          <td class="paramname"> <em>compfunc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#f571f96f363df9310562c7b49fab9b16">lruhash_delkeyfunc_t</a>&nbsp;</td>
          <td class="paramname"> <em>delkeyfunc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#3ae4e4bd0bff228eaa1c094e4db7774a">lruhash_deldatafunc_t</a>&nbsp;</td>
          <td class="paramname"> <em>deldatafunc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>arg</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Create new hash table. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>start_size,:</em>&nbsp;</td><td>size of hashtable array at start, must be power of 2. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>maxmem,:</em>&nbsp;</td><td>maximum amount of memory this table is allowed to use. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>sizefunc,:</em>&nbsp;</td><td>calculates memory usage of entries. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>compfunc,:</em>&nbsp;</td><td>compares entries, 0 on equality. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>delkeyfunc,:</em>&nbsp;</td><td>deletes key. Calling both delkey and deldata will also free the struct <a class="el" href="structlruhash__entry.html" title="An entry into the hash table.">lruhash_entry</a>. Make it part of the key structure and delete it in delkeyfunc. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>deldatafunc,:</em>&nbsp;</td><td>deletes data. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>arg,:</em>&nbsp;</td><td>user argument that is passed to user function calls. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: new hash table or NULL on malloc failure. </dd></dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00168">lruhash::array</a>, <a class="el" href="lruhash_8c_source.html#l00048">bin_init()</a>, <a class="el" href="lruhash_8h_source.html#l00161">lruhash::cb_arg</a>, <a class="el" href="lruhash_8h_source.html#l00153">lruhash::compfunc</a>, <a class="el" href="lruhash_8h_source.html#l00157">lruhash::deldatafunc</a>, <a class="el" href="lruhash_8h_source.html#l00155">lruhash::delkeyfunc</a>, <a class="el" href="lruhash_8h_source.html#l00149">lruhash::lock</a>, <a class="el" href="lruhash_8h_source.html#l00173">lruhash::lru_end</a>, <a class="el" href="lruhash_8h_source.html#l00171">lruhash::lru_start</a>, <a class="el" href="lruhash_8h_source.html#l00176">lruhash::num</a>, <a class="el" href="lruhash_8h_source.html#l00164">lruhash::size</a>, <a class="el" href="lruhash_8h_source.html#l00166">lruhash::size_mask</a>, <a class="el" href="lruhash_8h_source.html#l00151">lruhash::sizefunc</a>, <a class="el" href="lruhash_8h_source.html#l00180">lruhash::space_max</a>, and <a class="el" href="lruhash_8h_source.html#l00178">lruhash::space_used</a>.</p>

<p>Referenced by <a class="el" href="infra_8c_source.html#l00348">infra_set_lame()</a>, <a class="el" href="unitlruhash_8c_source.html#l00480">lruhash_test()</a>, and <a class="el" href="slabhash_8c_source.html#l00048">slabhash_create()</a>.</p>

</div>
</div><p>
<a class="anchor" name="dfe7a9a6b52cde80b177acd0c0f3ece8"></a><!-- doxytag: member="lruhash.c::bin_split" ref="dfe7a9a6b52cde80b177acd0c0f3ece8" args="(struct lruhash *table, struct lruhash_bin *newa, int newmask)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void bin_split           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlruhash.html">lruhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structlruhash__bin.html">lruhash_bin</a> *&nbsp;</td>
          <td class="paramname"> <em>newa</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>newmask</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Split hash bin into two new ones. 
<p>
Based on increased size_mask. Caller must hold hash table lock. At the end the routine acquires all hashbin locks (in the old array). This makes it wait for other threads to finish with the bins. So the bins are ready to be deleted after this function. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table with function pointers. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>newa,:</em>&nbsp;</td><td>new increased array. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>newmask,:</em>&nbsp;</td><td>new lookup mask. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00168">lruhash::array</a>, <a class="el" href="lruhash_8h_source.html#l00218">lruhash_entry::hash</a>, <a class="el" href="lruhash_8h_source.html#l00191">lruhash_bin::lock</a>, <a class="el" href="lruhash_8h_source.html#l00193">lruhash_bin::overflow_list</a>, <a class="el" href="lruhash_8h_source.html#l00212">lruhash_entry::overflow_next</a>, <a class="el" href="lruhash_8h_source.html#l00164">lruhash::size</a>, and <a class="el" href="lruhash_8h_source.html#l00166">lruhash::size_mask</a>.</p>

<p>Referenced by <a class="el" href="lruhash_8c_source.html#l00230">table_grow()</a>.</p>

</div>
</div><p>
<a class="anchor" name="91b01efd8c80b4061a08408adb7c50fa"></a><!-- doxytag: member="lruhash.c::lruhash_delete" ref="91b01efd8c80b4061a08408adb7c50fa" args="(struct lruhash *table)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void lruhash_delete           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlruhash.html">lruhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Delete hash table. 
<p>
Entries are all deleted. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>to delete. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00168">lruhash::array</a>, <a class="el" href="lruhash_8c_source.html#l00097">bin_delete()</a>, <a class="el" href="lruhash_8h_source.html#l00149">lruhash::lock</a>, and <a class="el" href="lruhash_8h_source.html#l00164">lruhash::size</a>.</p>

<p>Referenced by <a class="el" href="infra_8c_source.html#l00077">infra_host_deldatafunc()</a>, <a class="el" href="unitlruhash_8c_source.html#l00480">lruhash_test()</a>, and <a class="el" href="slabhash_8c_source.html#l00087">slabhash_delete()</a>.</p>

</div>
</div><p>
<a class="anchor" name="30828dda746ea00e95ac86b5a204df01"></a><!-- doxytag: member="lruhash.c::bin_overflow_remove" ref="30828dda746ea00e95ac86b5a204df01" args="(struct lruhash_bin *bin, struct lruhash_entry *entry)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void bin_overflow_remove           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlruhash__bin.html">lruhash_bin</a> *&nbsp;</td>
          <td class="paramname"> <em>bin</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *&nbsp;</td>
          <td class="paramname"> <em>entry</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Remove <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> from bin overflow chain. 
<p>
You must have locked the bin. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>bin,:</em>&nbsp;</td><td>hash bin to look into. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>,:</em>&nbsp;</td><td><a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> ptr that needs removal. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00193">lruhash_bin::overflow_list</a>, and <a class="el" href="lruhash_8h_source.html#l00212">lruhash_entry::overflow_next</a>.</p>

<p>Referenced by <a class="el" href="lruhash_8c_source.html#l00377">lruhash_remove()</a>, <a class="el" href="lruhash_8c_source.html#l00181">reclaim_space()</a>, and <a class="el" href="unitlruhash_8c_source.html#l00081">test_bin_find_entry()</a>.</p>

</div>
</div><p>
<a class="anchor" name="af9d7b32aa0703f22d4ce9a459b69c91"></a><!-- doxytag: member="lruhash.c::reclaim_space" ref="af9d7b32aa0703f22d4ce9a459b69c91" args="(struct lruhash *table, struct lruhash_entry **list)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void reclaim_space           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlruhash.html">lruhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> **&nbsp;</td>
          <td class="paramname"> <em>list</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Try to make space available by deleting old entries. 
<p>
Assumes that the lock on the hashtable is being held by caller. Caller must not hold bin locks. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>list,:</em>&nbsp;</td><td>list of entries that are to be deleted later. Entries have been removed from the hash table and writelock is held. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00168">lruhash::array</a>, <a class="el" href="lruhash_8c_source.html#l00166">bin_overflow_remove()</a>, <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="lruhash_8h_source.html#l00218">lruhash_entry::hash</a>, <a class="el" href="lruhash_8h_source.html#l00220">lruhash_entry::key</a>, <a class="el" href="lruhash_8h_source.html#l00210">lruhash_entry::lock</a>, <a class="el" href="lruhash_8h_source.html#l00191">lruhash_bin::lock</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="lruhash_8h_source.html#l00173">lruhash::lru_end</a>, <a class="el" href="lruhash_8h_source.html#l00214">lruhash_entry::lru_next</a>, <a class="el" href="lruhash_8h_source.html#l00216">lruhash_entry::lru_prev</a>, <a class="el" href="lruhash_8h_source.html#l00159">lruhash::markdelfunc</a>, <a class="el" href="lruhash_8h_source.html#l00176">lruhash::num</a>, <a class="el" href="lruhash_8h_source.html#l00212">lruhash_entry::overflow_next</a>, <a class="el" href="lruhash_8h_source.html#l00166">lruhash::size_mask</a>, <a class="el" href="lruhash_8h_source.html#l00151">lruhash::sizefunc</a>, <a class="el" href="lruhash_8h_source.html#l00180">lruhash::space_max</a>, and <a class="el" href="lruhash_8h_source.html#l00178">lruhash::space_used</a>.</p>

<p>Referenced by <a class="el" href="lruhash_8c_source.html#l00299">lruhash_insert()</a>.</p>

</div>
</div><p>
<a class="anchor" name="5d4e727ad2bda151d2afc1b9ac0c8815"></a><!-- doxytag: member="lruhash.c::bin_find_entry" ref="5d4e727ad2bda151d2afc1b9ac0c8815" args="(struct lruhash *table, struct lruhash_bin *bin, hashvalue_t hash, void *key)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a>* bin_find_entry           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlruhash.html">lruhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structlruhash__bin.html">lruhash_bin</a> *&nbsp;</td>
          <td class="paramname"> <em>bin</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a>&nbsp;</td>
          <td class="paramname"> <em>hash</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>key</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Find <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> in hash bin. 
<p>
You must have locked the bin. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table with function pointers. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>bin,:</em>&nbsp;</td><td>hash bin to look into. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>hash,:</em>&nbsp;</td><td>hash value to look for. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>key,:</em>&nbsp;</td><td>key to look for. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: the <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> or NULL if not found. </dd></dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00153">lruhash::compfunc</a>, <a class="el" href="lruhash_8h_source.html#l00218">lruhash_entry::hash</a>, <a class="el" href="lruhash_8h_source.html#l00220">lruhash_entry::key</a>, <a class="el" href="lruhash_8h_source.html#l00193">lruhash_bin::overflow_list</a>, and <a class="el" href="lruhash_8h_source.html#l00212">lruhash_entry::overflow_next</a>.</p>

<p>Referenced by <a class="el" href="lruhash_8c_source.html#l00299">lruhash_insert()</a>, <a class="el" href="lruhash_8c_source.html#l00355">lruhash_lookup()</a>, <a class="el" href="lruhash_8c_source.html#l00377">lruhash_remove()</a>, and <a class="el" href="unitlruhash_8c_source.html#l00081">test_bin_find_entry()</a>.</p>

</div>
</div><p>
<a class="anchor" name="10fafade8d45ec1e641a9ef22e198399"></a><!-- doxytag: member="lruhash.c::table_grow" ref="10fafade8d45ec1e641a9ef22e198399" args="(struct lruhash *table)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void table_grow           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlruhash.html">lruhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Grow the table lookup array. 
<p>
Becomes twice as large. Caller must hold the hash table lock. Must not hold any bin locks. Tries to grow, on malloc failure, nothing happened. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00168">lruhash::array</a>, <a class="el" href="lruhash_8c_source.html#l00048">bin_init()</a>, <a class="el" href="lruhash_8c_source.html#l00116">bin_split()</a>, <a class="el" href="lruhash_8h_source.html#l00191">lruhash_bin::lock</a>, <a class="el" href="lruhash_8h_source.html#l00149">lruhash::lock</a>, <a class="el" href="log_8c_source.html#l00241">log_err()</a>, <a class="el" href="lruhash_8h_source.html#l00164">lruhash::size</a>, and <a class="el" href="lruhash_8h_source.html#l00166">lruhash::size_mask</a>.</p>

<p>Referenced by <a class="el" href="lruhash_8c_source.html#l00299">lruhash_insert()</a>.</p>

</div>
</div><p>
<a class="anchor" name="b4665971a9eb38d5b3d61e9f67771627"></a><!-- doxytag: member="lruhash.c::lru_front" ref="b4665971a9eb38d5b3d61e9f67771627" args="(struct lruhash *table, struct lruhash_entry *entry)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void lru_front           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlruhash.html">lruhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *&nbsp;</td>
          <td class="paramname"> <em>entry</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Put <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> at front of lru. 
<p>
<a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> must be unlinked from lru. Caller must hold hash table lock. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table with lru head and tail. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>,:</em>&nbsp;</td><td><a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> to make most recently used. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00173">lruhash::lru_end</a>, <a class="el" href="lruhash_8h_source.html#l00214">lruhash_entry::lru_next</a>, <a class="el" href="lruhash_8h_source.html#l00216">lruhash_entry::lru_prev</a>, and <a class="el" href="lruhash_8h_source.html#l00171">lruhash::lru_start</a>.</p>

<p>Referenced by <a class="el" href="lruhash_8c_source.html#l00287">lru_touch()</a>, <a class="el" href="lruhash_8c_source.html#l00299">lruhash_insert()</a>, and <a class="el" href="unitlruhash_8c_source.html#l00162">test_lru()</a>.</p>

</div>
</div><p>
<a class="anchor" name="dfd80fb9c83d63b7533cf1a20eecff95"></a><!-- doxytag: member="lruhash.c::lru_remove" ref="dfd80fb9c83d63b7533cf1a20eecff95" args="(struct lruhash *table, struct lruhash_entry *entry)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void lru_remove           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlruhash.html">lruhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *&nbsp;</td>
          <td class="paramname"> <em>entry</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Remove <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> from lru list. 
<p>
Caller must hold hash table lock. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table with lru head and tail. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>,:</em>&nbsp;</td><td><a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> to remove from lru. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00173">lruhash::lru_end</a>, <a class="el" href="lruhash_8h_source.html#l00214">lruhash_entry::lru_next</a>, <a class="el" href="lruhash_8h_source.html#l00216">lruhash_entry::lru_prev</a>, and <a class="el" href="lruhash_8h_source.html#l00171">lruhash::lru_start</a>.</p>

<p>Referenced by <a class="el" href="lruhash_8c_source.html#l00287">lru_touch()</a>, <a class="el" href="lruhash_8c_source.html#l00377">lruhash_remove()</a>, and <a class="el" href="unitlruhash_8c_source.html#l00162">test_lru()</a>.</p>

</div>
</div><p>
<a class="anchor" name="271faf162f5d23025ca236b1fdb9e3e5"></a><!-- doxytag: member="lruhash.c::lru_touch" ref="271faf162f5d23025ca236b1fdb9e3e5" args="(struct lruhash *table, struct lruhash_entry *entry)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void lru_touch           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlruhash.html">lruhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *&nbsp;</td>
          <td class="paramname"> <em>entry</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Touch <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>, so it becomes the most recently used in the LRU list. 
<p>
Caller must hold hash table lock. The <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> must be inserted already. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>,:</em>&nbsp;</td><td><a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> to make first in LRU. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="lruhash_8c_source.html#l00265">lru_front()</a>, <a class="el" href="lruhash_8c_source.html#l00276">lru_remove()</a>, and <a class="el" href="lruhash_8h_source.html#l00171">lruhash::lru_start</a>.</p>

<p>Referenced by <a class="el" href="lruhash_8c_source.html#l00299">lruhash_insert()</a>, <a class="el" href="lruhash_8c_source.html#l00355">lruhash_lookup()</a>, and <a class="el" href="rrset_8c_source.html#l00092">rrset_cache_touch()</a>.</p>

</div>
</div><p>
<a class="anchor" name="3200b8f0d2e2bc6d62b34aa284f5225d"></a><!-- doxytag: member="lruhash.c::lruhash_insert" ref="3200b8f0d2e2bc6d62b34aa284f5225d" args="(struct lruhash *table, hashvalue_t hash, struct lruhash_entry *entry, void *data, void *cb_arg)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void lruhash_insert           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlruhash.html">lruhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a>&nbsp;</td>
          <td class="paramname"> <em>hash</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *&nbsp;</td>
          <td class="paramname"> <em>entry</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>cb_override</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Insert a new element into the hashtable. 
<p>
If key is already present data pointer in that <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> is updated. The space calculation function is called with the key, data. If necessary the least recently used entries are deleted to make space. If necessary the hash array is grown up.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>hash,:</em>&nbsp;</td><td>hash value. User calculates the hash. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>,:</em>&nbsp;</td><td>identifies the <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>. If key already present, this entry-&gt;key is deleted immediately. But entry-&gt;data is set to NULL before deletion, and put into the existing <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>. The data is then freed. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>data,:</em>&nbsp;</td><td>the data. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>cb_override,:</em>&nbsp;</td><td>if not null overrides the cb_arg for the deletefunc. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00168">lruhash::array</a>, <a class="el" href="lruhash_8c_source.html#l00217">bin_find_entry()</a>, <a class="el" href="lruhash_8h_source.html#l00161">lruhash::cb_arg</a>, <a class="el" href="lruhash_8h_source.html#l00153">lruhash::compfunc</a>, <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="lruhash_8h_source.html#l00157">lruhash::deldatafunc</a>, <a class="el" href="lruhash_8h_source.html#l00155">lruhash::delkeyfunc</a>, <a class="el" href="fptr__wlist_8h_source.html#l00067">fptr_ok</a>, <a class="el" href="fptr__wlist_8c_source.html#l00200">fptr_whitelist_hash_compfunc()</a>, <a class="el" href="fptr__wlist_8c_source.html#l00224">fptr_whitelist_hash_deldatafunc()</a>, <a class="el" href="fptr__wlist_8c_source.html#l00212">fptr_whitelist_hash_delkeyfunc()</a>, <a class="el" href="fptr__wlist_8c_source.html#l00236">fptr_whitelist_hash_markdelfunc()</a>, <a class="el" href="fptr__wlist_8c_source.html#l00188">fptr_whitelist_hash_sizefunc()</a>, <a class="el" href="lruhash_8h_source.html#l00220">lruhash_entry::key</a>, <a class="el" href="lruhash_8h_source.html#l00210">lruhash_entry::lock</a>, <a class="el" href="lruhash_8h_source.html#l00191">lruhash_bin::lock</a>, <a class="el" href="lruhash_8h_source.html#l00149">lruhash::lock</a>, <a class="el" href="lruhash_8c_source.html#l00265">lru_front()</a>, <a class="el" href="lruhash_8c_source.html#l00287">lru_touch()</a>, <a class="el" href="lruhash_8h_source.html#l00159">lruhash::markdelfunc</a>, <a class="el" href="lruhash_8h_source.html#l00176">lruhash::num</a>, <a class="el" href="lruhash_8h_source.html#l00193">lruhash_bin::overflow_list</a>, <a class="el" href="lruhash_8h_source.html#l00212">lruhash_entry::overflow_next</a>, <a class="el" href="lruhash_8c_source.html#l00181">reclaim_space()</a>, <a class="el" href="lruhash_8h_source.html#l00164">lruhash::size</a>, <a class="el" href="lruhash_8h_source.html#l00166">lruhash::size_mask</a>, <a class="el" href="lruhash_8h_source.html#l00151">lruhash::sizefunc</a>, <a class="el" href="lruhash_8h_source.html#l00180">lruhash::space_max</a>, <a class="el" href="lruhash_8h_source.html#l00178">lruhash::space_used</a>, and <a class="el" href="lruhash_8c_source.html#l00230">table_grow()</a>.</p>

<p>Referenced by <a class="el" href="infra_8c_source.html#l00348">infra_set_lame()</a>, <a class="el" href="slabhash_8c_source.html#l00116">slabhash_insert()</a>, <a class="el" href="unitlruhash_8c_source.html#l00209">test_short_table()</a>, <a class="el" href="unitlruhash_8c_source.html#l00235">testadd()</a>, and <a class="el" href="unitlruhash_8c_source.html#l00313">testadd_unlim()</a>.</p>

</div>
</div><p>
<a class="anchor" name="bdba9cbf079f9255e49b53f7d9804661"></a><!-- doxytag: member="lruhash.c::lruhash_lookup" ref="bdba9cbf079f9255e49b53f7d9804661" args="(struct lruhash *table, hashvalue_t hash, void *key, int wr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a>* lruhash_lookup           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlruhash.html">lruhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a>&nbsp;</td>
          <td class="paramname"> <em>hash</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>key</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>wr</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Lookup an <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> in the hashtable. 
<p>
At the end of the function you hold a (read/write)lock on the <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>. The LRU is updated for the <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> (if found). <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>hash,:</em>&nbsp;</td><td>hash of key. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>key,:</em>&nbsp;</td><td>what to look for, compared against entries in overflow chain. the hash value must be set, and must work with compare function. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>wr,:</em>&nbsp;</td><td>set to true if you desire a writelock on the <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>. with a writelock you can update the data part. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: pointer to the <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> or NULL. The <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> is locked. The user must unlock the <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> when done. </dd></dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00168">lruhash::array</a>, <a class="el" href="lruhash_8c_source.html#l00217">bin_find_entry()</a>, <a class="el" href="lruhash_8h_source.html#l00153">lruhash::compfunc</a>, <a class="el" href="fptr__wlist_8h_source.html#l00067">fptr_ok</a>, <a class="el" href="fptr__wlist_8c_source.html#l00200">fptr_whitelist_hash_compfunc()</a>, <a class="el" href="lruhash_8h_source.html#l00210">lruhash_entry::lock</a>, <a class="el" href="lruhash_8h_source.html#l00191">lruhash_bin::lock</a>, <a class="el" href="lruhash_8h_source.html#l00149">lruhash::lock</a>, <a class="el" href="lruhash_8c_source.html#l00287">lru_touch()</a>, and <a class="el" href="lruhash_8h_source.html#l00166">lruhash::size_mask</a>.</p>

<p>Referenced by <a class="el" href="infra_8c_source.html#l00277">infra_lookup_lame()</a>, <a class="el" href="slabhash_8c_source.html#l00122">slabhash_lookup()</a>, <a class="el" href="unitlruhash_8c_source.html#l00209">test_short_table()</a>, <a class="el" href="unitlruhash_8c_source.html#l00258">testlookup()</a>, and <a class="el" href="unitlruhash_8c_source.html#l00338">testlookup_unlim()</a>.</p>

</div>
</div><p>
<a class="anchor" name="eda7529dfac9933fdae541333346209d"></a><!-- doxytag: member="lruhash.c::lruhash_remove" ref="eda7529dfac9933fdae541333346209d" args="(struct lruhash *table, hashvalue_t hash, void *key)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void lruhash_remove           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlruhash.html">lruhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a>&nbsp;</td>
          <td class="paramname"> <em>hash</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>key</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Remove <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> from hashtable. 
<p>
Does nothing if not found in hashtable. Delfunc is called for the <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>hash,:</em>&nbsp;</td><td>hash of key. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>key,:</em>&nbsp;</td><td>what to look for. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00168">lruhash::array</a>, <a class="el" href="lruhash_8c_source.html#l00217">bin_find_entry()</a>, <a class="el" href="lruhash_8c_source.html#l00166">bin_overflow_remove()</a>, <a class="el" href="lruhash_8h_source.html#l00161">lruhash::cb_arg</a>, <a class="el" href="lruhash_8h_source.html#l00153">lruhash::compfunc</a>, <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="lruhash_8h_source.html#l00157">lruhash::deldatafunc</a>, <a class="el" href="lruhash_8h_source.html#l00155">lruhash::delkeyfunc</a>, <a class="el" href="fptr__wlist_8h_source.html#l00067">fptr_ok</a>, <a class="el" href="fptr__wlist_8c_source.html#l00200">fptr_whitelist_hash_compfunc()</a>, <a class="el" href="fptr__wlist_8c_source.html#l00224">fptr_whitelist_hash_deldatafunc()</a>, <a class="el" href="fptr__wlist_8c_source.html#l00212">fptr_whitelist_hash_delkeyfunc()</a>, <a class="el" href="fptr__wlist_8c_source.html#l00236">fptr_whitelist_hash_markdelfunc()</a>, <a class="el" href="fptr__wlist_8c_source.html#l00188">fptr_whitelist_hash_sizefunc()</a>, <a class="el" href="lruhash_8h_source.html#l00220">lruhash_entry::key</a>, <a class="el" href="lruhash_8h_source.html#l00210">lruhash_entry::lock</a>, <a class="el" href="lruhash_8h_source.html#l00191">lruhash_bin::lock</a>, <a class="el" href="lruhash_8h_source.html#l00149">lruhash::lock</a>, <a class="el" href="lruhash_8c_source.html#l00276">lru_remove()</a>, <a class="el" href="lruhash_8h_source.html#l00159">lruhash::markdelfunc</a>, <a class="el" href="lruhash_8h_source.html#l00176">lruhash::num</a>, <a class="el" href="lruhash_8h_source.html#l00166">lruhash::size_mask</a>, <a class="el" href="lruhash_8h_source.html#l00151">lruhash::sizefunc</a>, and <a class="el" href="lruhash_8h_source.html#l00178">lruhash::space_used</a>.</p>

<p>Referenced by <a class="el" href="slabhash_8c_source.html#l00128">slabhash_remove()</a>, <a class="el" href="unitlruhash_8c_source.html#l00209">test_short_table()</a>, <a class="el" href="unitlruhash_8c_source.html#l00247">testremove()</a>, and <a class="el" href="unitlruhash_8c_source.html#l00326">testremove_unlim()</a>.</p>

</div>
</div><p>
<a class="anchor" name="e170ef01dc4b5fb932335aacfe4976a0"></a><!-- doxytag: member="lruhash.c::lruhash_clear" ref="e170ef01dc4b5fb932335aacfe4976a0" args="(struct lruhash *table)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void lruhash_clear           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlruhash.html">lruhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Clear hash table. 
<p>
Entries are all deleted, while locking them before doing so. At end the table is empty. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>to make empty. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00168">lruhash::array</a>, <a class="el" href="lruhash_8c_source.html#l00415">bin_clear()</a>, <a class="el" href="lruhash_8h_source.html#l00157">lruhash::deldatafunc</a>, <a class="el" href="lruhash_8h_source.html#l00155">lruhash::delkeyfunc</a>, <a class="el" href="fptr__wlist_8h_source.html#l00067">fptr_ok</a>, <a class="el" href="fptr__wlist_8c_source.html#l00224">fptr_whitelist_hash_deldatafunc()</a>, <a class="el" href="fptr__wlist_8c_source.html#l00212">fptr_whitelist_hash_delkeyfunc()</a>, <a class="el" href="fptr__wlist_8c_source.html#l00236">fptr_whitelist_hash_markdelfunc()</a>, <a class="el" href="lruhash_8h_source.html#l00149">lruhash::lock</a>, <a class="el" href="lruhash_8h_source.html#l00173">lruhash::lru_end</a>, <a class="el" href="lruhash_8h_source.html#l00171">lruhash::lru_start</a>, <a class="el" href="lruhash_8h_source.html#l00159">lruhash::markdelfunc</a>, <a class="el" href="lruhash_8h_source.html#l00176">lruhash::num</a>, <a class="el" href="lruhash_8h_source.html#l00164">lruhash::size</a>, and <a class="el" href="lruhash_8h_source.html#l00178">lruhash::space_used</a>.</p>

<p>Referenced by <a class="el" href="slabhash_8c_source.html#l00100">slabhash_clear()</a>, and <a class="el" href="unitlruhash_8c_source.html#l00360">test_long_table()</a>.</p>

</div>
</div><p>
<a class="anchor" name="1843ea95152efc257e96814bc7eb0dc0"></a><!-- doxytag: member="lruhash.c::lruhash_status" ref="1843ea95152efc257e96814bc7eb0dc0" args="(struct lruhash *table, const char *id, int extended)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void lruhash_status           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlruhash.html">lruhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>extended</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Output debug info to the log as to state of the hash table. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>id,:</em>&nbsp;</td><td>string printed with table to identify the hash table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>extended,:</em>&nbsp;</td><td>set to true to print statistics on overflow bin lengths. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00168">lruhash::array</a>, <a class="el" href="lruhash_8h_source.html#l00191">lruhash_bin::lock</a>, <a class="el" href="lruhash_8h_source.html#l00149">lruhash::lock</a>, <a class="el" href="log_8c_source.html#l00228">log_info()</a>, <a class="el" href="lruhash_8h_source.html#l00176">lruhash::num</a>, <a class="el" href="lruhash_8h_source.html#l00193">lruhash_bin::overflow_list</a>, <a class="el" href="lruhash_8h_source.html#l00212">lruhash_entry::overflow_next</a>, <a class="el" href="lruhash_8h_source.html#l00164">lruhash::size</a>, <a class="el" href="lruhash_8h_source.html#l00166">lruhash::size_mask</a>, <a class="el" href="lruhash_8h_source.html#l00180">lruhash::space_max</a>, and <a class="el" href="lruhash_8h_source.html#l00178">lruhash::space_used</a>.</p>

<p>Referenced by <a class="el" href="slabhash_8c_source.html#l00133">slabhash_status()</a>, <a class="el" href="unitlruhash_8c_source.html#l00360">test_long_table()</a>, <a class="el" href="unitlruhash_8c_source.html#l00432">test_thr_main()</a>, and <a class="el" href="unitlruhash_8c_source.html#l00462">test_threaded_table()</a>.</p>

</div>
</div><p>
<a class="anchor" name="2a345f99507b392bb63f7294fab05ca3"></a><!-- doxytag: member="lruhash.c::lruhash_get_mem" ref="2a345f99507b392bb63f7294fab05ca3" args="(struct lruhash *table)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t lruhash_get_mem           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlruhash.html">lruhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Get memory in use now by the <a class="el" href="structlruhash.html" title="Hash table that keeps LRU list of entries.">lruhash</a> table. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table. Will be locked before use. And unlocked after. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>size in bytes. </dd></dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00168">lruhash::array</a>, <a class="el" href="lruhash_8h_source.html#l00191">lruhash_bin::lock</a>, <a class="el" href="lruhash_8h_source.html#l00149">lruhash::lock</a>, and <a class="el" href="lruhash_8h_source.html#l00164">lruhash::size</a>.</p>

<p>Referenced by <a class="el" href="infra_8c_source.html#l00569">count_host_lame()</a>, and <a class="el" href="slabhash_8c_source.html#l00156">slabhash_get_mem()</a>.</p>

</div>
</div><p>
<a class="anchor" name="4f4509a9e30f7ba912b260e5e2685088"></a><!-- doxytag: member="lruhash.c::lruhash_traverse" ref="4f4509a9e30f7ba912b260e5e2685088" args="(struct lruhash *h, int wr, void(*func)(struct lruhash_entry *, void *), void *arg)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void lruhash_traverse           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlruhash.html">lruhash</a> *&nbsp;</td>
          <td class="paramname"> <em>h</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>wr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void(*)(struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *, void *)&nbsp;</td>
          <td class="paramname"> <em>func</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>arg</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Traverse a <a class="el" href="structlruhash.html" title="Hash table that keeps LRU list of entries.">lruhash</a>. 
<p>
Call back for every element in the table. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>h,:</em>&nbsp;</td><td>hash table. Locked before use. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>wr,:</em>&nbsp;</td><td>if true writelock is obtained on element, otherwise readlock. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>func,:</em>&nbsp;</td><td>function for every element. Do not lock or unlock elements. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>arg,:</em>&nbsp;</td><td>user argument to func. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00168">lruhash::array</a>, <a class="el" href="lruhash_8h_source.html#l00210">lruhash_entry::lock</a>, <a class="el" href="lruhash_8h_source.html#l00191">lruhash_bin::lock</a>, <a class="el" href="lruhash_8h_source.html#l00149">lruhash::lock</a>, <a class="el" href="lruhash_8h_source.html#l00193">lruhash_bin::overflow_list</a>, <a class="el" href="lruhash_8h_source.html#l00212">lruhash_entry::overflow_next</a>, and <a class="el" href="lruhash_8h_source.html#l00164">lruhash::size</a>.</p>

<p>Referenced by <a class="el" href="slabhash_8c_source.html#l00213">slabhash_traverse()</a>.</p>

</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Tue Oct 13 06:46:33 2009 for unbound by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
</body>
</html>