1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
3 <title>Hash tables</title>
4 <link href="doxygen.css" rel="stylesheet" type="text/css">
5 </head><body bgcolor="#ffffff">
6 <!-- Generated by Doxygen 1.2.8.1 -->
8 <a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="modules.html">Modules</a> </center>
9 <hr><h1>Hash tables</h1>Operations for hash tables.
10 <a href="#_details">More...</a><table border=0 cellpadding=0 cellspacing=0>
11 <tr><td colspan=2><br><h2>Defines</h2></td></tr>
12 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a16">HASH_FLAG_AUTOGROW</a></td></tr>
13 <tr><td> </td><td><font size=-1><em>Flag permitting a hash table to automatically grow.</em> <a href="#a16">More...</a><em></em></font><br><br></td></tr>
14 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a17">HASH_FLAG_AUTOSHRINK</a></td></tr>
15 <tr><td> </td><td><font size=-1><em>Flag permitting a hash table to automatically shrink.</em> <a href="#a17">More...</a><em></em></font><br><br></td></tr>
16 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a18">HASH_TABLE_INIT</a>(flags, func, comp, resize, extra)</td></tr>
17 <tr><td> </td><td><font size=-1><em>Hash table static initializer.</em> <a href="#a18">More...</a><em></em></font><br><br></td></tr>
18 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a19">ht_verify</a>(table)</td></tr>
19 <tr><td> </td><td><font size=-1><em>Hash table verification macro.</em> <a href="#a19">More...</a><em></em></font><br><br></td></tr>
20 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a20">ht_flags</a>(table)</td></tr>
21 <tr><td> </td><td><font size=-1><em>Hash table flags.</em> <a href="#a20">More...</a><em></em></font><br><br></td></tr>
22 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a21">ht_frozen</a>(table)</td></tr>
23 <tr><td> </td><td><font size=-1><em>Determine if a hash table is frozen.</em> <a href="#a21">More...</a><em></em></font><br><br></td></tr>
24 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a22">ht_modulus</a>(table)</td></tr>
25 <tr><td> </td><td><font size=-1><em>Hash table modulus.</em> <a href="#a22">More...</a><em></em></font><br><br></td></tr>
26 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a23">ht_count</a>(table)</td></tr>
27 <tr><td> </td><td><font size=-1><em>Hash table count.</em> <a href="#a23">More...</a><em></em></font><br><br></td></tr>
28 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a24">ht_func</a>(table)</td></tr>
29 <tr><td> </td><td><font size=-1><em>Hash table hash function.</em> <a href="#a24">More...</a><em></em></font><br><br></td></tr>
30 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a25">ht_comp</a>(table)</td></tr>
31 <tr><td> </td><td><font size=-1><em>Hash table comparison function.</em> <a href="#a25">More...</a><em></em></font><br><br></td></tr>
32 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a26">ht_rsize</a>(table)</td></tr>
33 <tr><td> </td><td><font size=-1><em>Hash table resize callback function.</em> <a href="#a26">More...</a><em></em></font><br><br></td></tr>
34 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a27">ht_extra</a>(table)</td></tr>
35 <tr><td> </td><td><font size=-1><em>Extra pointer data in a hash table.</em> <a href="#a27">More...</a><em></em></font><br><br></td></tr>
36 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a28">ht_size</a>(table)</td></tr>
37 <tr><td> </td><td><font size=-1><em>Hash table memory size.</em> <a href="#a28">More...</a><em></em></font><br><br></td></tr>
38 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a29">HASH_ENTRY_INIT</a>(value)</td></tr>
39 <tr><td> </td><td><font size=-1><em>Hash table entry static initializer.</em> <a href="#a29">More...</a><em></em></font><br><br></td></tr>
40 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a30">he_verify</a>(entry)</td></tr>
41 <tr><td> </td><td><font size=-1><em>Hash table entry verification macro.</em> <a href="#a30">More...</a><em></em></font><br><br></td></tr>
42 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a31">he_link</a>(entry)</td></tr>
43 <tr><td> </td><td><font size=-1><em>Hash table entry linked list element.</em> <a href="#a31">More...</a><em></em></font><br><br></td></tr>
44 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a32">he_flags</a>(entry)</td></tr>
45 <tr><td> </td><td><font size=-1><em>Hash table entry flags.</em> <a href="#a32">More...</a><em></em></font><br><br></td></tr>
46 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a33">he_table</a>(entry)</td></tr>
47 <tr><td> </td><td><font size=-1><em>Hash table entry table pointer.</em> <a href="#a33">More...</a><em></em></font><br><br></td></tr>
48 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a34">he_hash</a>(entry)</td></tr>
49 <tr><td> </td><td><font size=-1><em>Hash table entry hash value.</em> <a href="#a34">More...</a><em></em></font><br><br></td></tr>
50 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a35">he_key</a>(entry)</td></tr>
51 <tr><td> </td><td><font size=-1><em>Hash table entry key pointer.</em> <a href="#a35">More...</a><em></em></font><br><br></td></tr>
52 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a36">he_value</a>(entry)</td></tr>
53 <tr><td> </td><td><font size=-1><em>Hash table entry value pointer.</em> <a href="#a36">More...</a><em></em></font><br><br></td></tr>
54 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a37">st_rsize</a>(table)</td></tr>
55 <tr><td> </td><td><font size=-1><em>Sparse matrix table resize callback function.</em> <a href="#a37">More...</a><em></em></font><br><br></td></tr>
56 <tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
57 <tr><td nowrap align=right valign=top>typedef struct _hash_table_s </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a></td></tr>
58 <tr><td> </td><td><font size=-1><em>Hash table.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
59 <tr><td nowrap align=right valign=top>typedef struct _hash_entry_s </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a></td></tr>
60 <tr><td> </td><td><font size=-1><em>Hash table entry.</em> <a href="#a1">More...</a><em></em></font><br><br></td></tr>
61 <tr><td nowrap align=right valign=top>typedef unsigned long (* </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a2">hash_iter_t</a> )(<a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> *, <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a> *, void *)</td></tr>
62 <tr><td> </td><td><font size=-1><em>Hash table iteration callback.</em> <a href="#a2">More...</a><em></em></font><br><br></td></tr>
63 <tr><td nowrap align=right valign=top>typedef unsigned long (* </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a3">hash_func_t</a> )(<a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> *, <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> *)</td></tr>
64 <tr><td> </td><td><font size=-1><em>Hash function callback.</em> <a href="#a3">More...</a><em></em></font><br><br></td></tr>
65 <tr><td nowrap align=right valign=top>typedef unsigned long (* </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a4">hash_comp_t</a> )(<a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> *, <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> *, <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> *)</td></tr>
66 <tr><td> </td><td><font size=-1><em>Hash table comparison callback.</em> <a href="#a4">More...</a><em></em></font><br><br></td></tr>
67 <tr><td nowrap align=right valign=top>typedef unsigned long (* </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a5">hash_resize_t</a> )(<a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> *, unsigned long)</td></tr>
68 <tr><td> </td><td><font size=-1><em>Hash table resize callback.</em> <a href="#a5">More...</a><em></em></font><br><br></td></tr>
69 <tr><td colspan=2><br><h2>Functions</h2></td></tr>
70 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a6">ht_init</a> (<a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> *table, unsigned long flags, <a class="el" href="group__dbprim__hash.html#a3">hash_func_t</a> func, <a class="el" href="group__dbprim__hash.html#a4">hash_comp_t</a> comp, <a class="el" href="group__dbprim__hash.html#a5">hash_resize_t</a> resize, void *extra, unsigned long init_mod)</td></tr>
71 <tr><td> </td><td><font size=-1><em>Dynamically initialize a hash table.</em> <a href="#a6">More...</a><em></em></font><br><br></td></tr>
72 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a7">ht_add</a> (<a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> *table, <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a> *entry, <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> *key)</td></tr>
73 <tr><td> </td><td><font size=-1><em>Add an entry to a hash table.</em> <a href="#a7">More...</a><em></em></font><br><br></td></tr>
74 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a8">ht_move</a> (<a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> *table, <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a> *entry, <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> *key)</td></tr>
75 <tr><td> </td><td><font size=-1><em>Move an entry in the hash table.</em> <a href="#a8">More...</a><em></em></font><br><br></td></tr>
76 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a9">ht_remove</a> (<a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> *table, <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a> *entry)</td></tr>
77 <tr><td> </td><td><font size=-1><em>Remove an element from a hash table.</em> <a href="#a9">More...</a><em></em></font><br><br></td></tr>
78 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a10">ht_find</a> (<a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> *table, <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a> **entry_p, <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> *key)</td></tr>
79 <tr><td> </td><td><font size=-1><em>Find an entry in a hash table.</em> <a href="#a10">More...</a><em></em></font><br><br></td></tr>
80 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a11">ht_iter</a> (<a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> *table, <a class="el" href="group__dbprim__hash.html#a2">hash_iter_t</a> iter_func, void *extra)</td></tr>
81 <tr><td> </td><td><font size=-1><em>Iterate over each entry in a hash table.</em> <a href="#a11">More...</a><em></em></font><br><br></td></tr>
82 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a12">ht_flush</a> (<a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> *table, <a class="el" href="group__dbprim__hash.html#a2">hash_iter_t</a> flush_func, void *extra)</td></tr>
83 <tr><td> </td><td><font size=-1><em>Flush a hash table.</em> <a href="#a12">More...</a><em></em></font><br><br></td></tr>
84 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a13">ht_resize</a> (<a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> *table, unsigned long new_size)</td></tr>
85 <tr><td> </td><td><font size=-1><em>Resize a hash table.</em> <a href="#a13">More...</a><em></em></font><br><br></td></tr>
86 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a14">ht_free</a> (<a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> *table)</td></tr>
87 <tr><td> </td><td><font size=-1><em>Free memory used by an empty hash table.</em> <a href="#a14">More...</a><em></em></font><br><br></td></tr>
88 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__hash.html#a15">he_init</a> (<a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a> *entry, void *value)</td></tr>
89 <tr><td> </td><td><font size=-1><em>Dynamically initialize a hash table entry.</em> <a href="#a15">More...</a><em></em></font><br><br></td></tr>
91 <hr><a name="_details"></a><h2>Detailed Description</h2>
92 Hash tables are a basic data structure used in building databases. Hash tables provide a means of storing data such that an arbitrary entry may be looked up efficiently. This library implements a hash table that may optionally grow and shrink to provide maximum efficiency. The implementation is with two kinds of caller-allocated structures--a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> structure that describes the table and a <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a> structure for each entry in the table. The library allocates a bucket array which must be released with the <a class="el" href="group__dbprim__hash.html#a14">ht_free</a>() function when the hash table has been emptied. Additionally, the hash table may be manually resized with the <a class="el" href="group__dbprim__hash.html#a13">ht_resize</a>() function.
94 Entries may be added to and removed from the table using the <a class="el" href="group__dbprim__hash.html#a7">ht_add</a>() and <a class="el" href="group__dbprim__hash.html#a9">ht_remove</a>() functions. Additionally, the key on a given entry may be changed using the <a class="el" href="group__dbprim__hash.html#a8">ht_move</a>() function. Of course, any given entry may be looked up using the <a class="el" href="group__dbprim__hash.html#a10">ht_find</a>() function, and <a class="el" href="group__dbprim__hash.html#a11">ht_iter</a>() will execute a user-defined function for each entry in the hash table (in an unspecified order). The <a class="el" href="group__dbprim__hash.html#a12">ht_flush</a>() function will remove all entries from the hash table, optionally executing a user-specified clean-up function. <hr><h2>Define Documentation</h2>
95 <a name="a29" doxytag="dbprim.h.top::HASH_ENTRY_INIT"></a><p>
96 <table width="100%" cellpadding="2" cellspacing="0" border="0">
99 <table cellpadding="0" cellspacing="0" border="0">
101 <td nowrap valign="top"><b>
102 #define HASH_ENTRY_INIT(
104 <td valign="bottom"><b>
110 <table cellspacing=5 cellpadding=0 border=0>
120 This macro statically initializes a <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a>.<dl compact><dt>
121 <b>Parameters: </b><dd>
122 <table border=0 cellspacing=2 cellpadding=0>
123 <tr><td valign=top><em>value</em>
125 A pointer to <code>void</code> representing the object associated with the entry. </td></tr>
130 <a name="a16" doxytag="dbprim.h.top::HASH_FLAG_AUTOGROW"></a><p>
131 <table width="100%" cellpadding="2" cellspacing="0" border="0">
134 <table cellpadding="0" cellspacing="0" border="0">
136 <td nowrap valign="top"><b>
137 #define HASH_FLAG_AUTOGROW
142 <table cellspacing=5 cellpadding=0 border=0>
152 If passed in to <a class="el" href="group__dbprim__hash.html#a18">HASH_TABLE_INIT</a>() or <a class="el" href="group__dbprim__hash.html#a6">ht_init</a>(), allows the hash table to grow automatically. </td>
155 <a name="a17" doxytag="dbprim.h.top::HASH_FLAG_AUTOSHRINK"></a><p>
156 <table width="100%" cellpadding="2" cellspacing="0" border="0">
159 <table cellpadding="0" cellspacing="0" border="0">
161 <td nowrap valign="top"><b>
162 #define HASH_FLAG_AUTOSHRINK
167 <table cellspacing=5 cellpadding=0 border=0>
177 If passed in to <a class="el" href="group__dbprim__hash.html#a18">HASH_TABLE_INIT</a>() or <a class="el" href="group__dbprim__hash.html#a6">ht_init</a>(), allows the hash table to shrink automatically. </td>
180 <a name="a18" doxytag="dbprim.h.top::HASH_TABLE_INIT"></a><p>
181 <table width="100%" cellpadding="2" cellspacing="0" border="0">
184 <table cellpadding="0" cellspacing="0" border="0">
186 <td nowrap valign="top"><b>
187 #define HASH_TABLE_INIT(
189 <td valign="bottom"><b>
190 flags, func, comp, resize, extra )
195 <table cellspacing=5 cellpadding=0 border=0>
205 This macro statically initializes a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>.<dl compact><dt>
206 <b>Parameters: </b><dd>
207 <table border=0 cellspacing=2 cellpadding=0>
208 <tr><td valign=top><em>flags</em>
210 A bit-wise OR of <a class="el" href="group__dbprim__hash.html#a16">HASH_FLAG_AUTOGROW</a> and <a class="el" href="group__dbprim__hash.html#a17">HASH_FLAG_AUTOSHRINK</a>. If neither behavior is desired, use 0. </td></tr>
211 <tr><td valign=top><em>func</em>
213 A <a class="el" href="group__dbprim__hash.html#a3">hash_func_t</a> function pointer for a hash function. </td></tr>
214 <tr><td valign=top><em>comp</em>
216 A <a class="el" href="group__dbprim__hash.html#a4">hash_comp_t</a> function pointer for a comparison function. </td></tr>
217 <tr><td valign=top><em>resize</em>
219 A <a class="el" href="group__dbprim__hash.html#a5">hash_resize_t</a> function pointer for determining whether resizing is permitted and/or for notification of the resize. </td></tr>
220 <tr><td valign=top><em>extra</em>
222 Extra pointer data that should be associated with the hash table. </td></tr>
227 <a name="a32" doxytag="dbprim.h.top::he_flags"></a><p>
228 <table width="100%" cellpadding="2" cellspacing="0" border="0">
231 <table cellpadding="0" cellspacing="0" border="0">
233 <td nowrap valign="top"><b>
236 <td valign="bottom"><b>
242 <table cellspacing=5 cellpadding=0 border=0>
252 This macro retrieves a set of user-defined flags associated with the entry. It may be used as an lvalue to set those flags.<dl compact><dt>
253 <b>Parameters: </b><dd>
254 <table border=0 cellspacing=2 cellpadding=0>
255 <tr><td valign=top><em>entry</em>
257 A pointer to a <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a>.
261 </dl><dl compact><dt>
263 An <code>unsigned long</code> containing the flags associated with the entry. </dl> </td>
266 <a name="a34" doxytag="dbprim.h.top::he_hash"></a><p>
267 <table width="100%" cellpadding="2" cellspacing="0" border="0">
270 <table cellpadding="0" cellspacing="0" border="0">
272 <td nowrap valign="top"><b>
275 <td valign="bottom"><b>
281 <table cellspacing=5 cellpadding=0 border=0>
291 This macro retrieves the hash value of the given hash entry. If the hash table has been resized, this value may not be the same as a previous value.<dl compact><dt>
292 <b>Parameters: </b><dd>
293 <table border=0 cellspacing=2 cellpadding=0>
294 <tr><td valign=top><em>entry</em>
296 A pointer to a <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a>.
300 </dl><dl compact><dt>
302 An <code>unsigned long</code> containing the hash code for the entry. </dl> </td>
305 <a name="a35" doxytag="dbprim.h.top::he_key"></a><p>
306 <table width="100%" cellpadding="2" cellspacing="0" border="0">
309 <table cellpadding="0" cellspacing="0" border="0">
311 <td nowrap valign="top"><b>
314 <td valign="bottom"><b>
320 <table cellspacing=5 cellpadding=0 border=0>
330 This macro retrieves the key associated with the hash table entry.<dl compact><dt>
331 <b>Parameters: </b><dd>
332 <table border=0 cellspacing=2 cellpadding=0>
333 <tr><td valign=top><em>entry</em>
335 A pointer to a <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a>.
339 </dl><dl compact><dt>
341 A pointer to a <a class="el" href="group__dbprim__key.html#a0">db_key_t</a>. </dl> </td>
344 <a name="a31" doxytag="dbprim.h.top::he_link"></a><p>
345 <table width="100%" cellpadding="2" cellspacing="0" border="0">
348 <table cellpadding="0" cellspacing="0" border="0">
350 <td nowrap valign="top"><b>
353 <td valign="bottom"><b>
359 <table cellspacing=5 cellpadding=0 border=0>
369 This macro provides access to the linked list element buried in the hash table entry. It should *not* be used on entries currently in a hash table. The purpose of this macro is to allow an object containing a hash table entry to be placed upon a free list.<dl compact><dt>
370 <b>Parameters: </b><dd>
371 <table border=0 cellspacing=2 cellpadding=0>
372 <tr><td valign=top><em>entry</em>
374 A pointer to a <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a>.
378 </dl><dl compact><dt>
380 A pointer to a <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a>. </dl> </td>
383 <a name="a33" doxytag="dbprim.h.top::he_table"></a><p>
384 <table width="100%" cellpadding="2" cellspacing="0" border="0">
387 <table cellpadding="0" cellspacing="0" border="0">
389 <td nowrap valign="top"><b>
392 <td valign="bottom"><b>
398 <table cellspacing=5 cellpadding=0 border=0>
408 This macro retrieves a pointer to the hash table the entry is in.<dl compact><dt>
409 <b>Parameters: </b><dd>
410 <table border=0 cellspacing=2 cellpadding=0>
411 <tr><td valign=top><em>entry</em>
413 A pointer to a <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a>.
417 </dl><dl compact><dt>
419 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>. </dl> </td>
422 <a name="a36" doxytag="dbprim.h.top::he_value"></a><p>
423 <table width="100%" cellpadding="2" cellspacing="0" border="0">
426 <table cellpadding="0" cellspacing="0" border="0">
428 <td nowrap valign="top"><b>
431 <td valign="bottom"><b>
437 <table cellspacing=5 cellpadding=0 border=0>
447 This macro retrieves the value associated with the hash table entry. It may be treated as an lvalue to change that value. Care should be taken when using this option.<dl compact><dt>
448 <b>Parameters: </b><dd>
449 <table border=0 cellspacing=2 cellpadding=0>
450 <tr><td valign=top><em>entry</em>
452 A pointer to a <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a>.
456 </dl><dl compact><dt>
458 A pointer to <code>void</code> representing the value associated with this entry. </dl> </td>
461 <a name="a30" doxytag="dbprim.h.top::he_verify"></a><p>
462 <table width="100%" cellpadding="2" cellspacing="0" border="0">
465 <table cellpadding="0" cellspacing="0" border="0">
467 <td nowrap valign="top"><b>
470 <td valign="bottom"><b>
476 <table cellspacing=5 cellpadding=0 border=0>
486 This macro verifies that a given pointer actually does point to a hash table entry.<dl compact><dt>
487 <b>Parameters: </b><dd>
488 <table border=0 cellspacing=2 cellpadding=0>
489 <tr><td valign=top><em>entry</em>
491 A pointer to a <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a>.
495 </dl><dl compact><dt>
497 Boolean true if <code>entry</code> is a valid hash table entry or false otherwise. </dl> </td>
500 <a name="a25" doxytag="dbprim.h.top::ht_comp"></a><p>
501 <table width="100%" cellpadding="2" cellspacing="0" border="0">
504 <table cellpadding="0" cellspacing="0" border="0">
506 <td nowrap valign="top"><b>
509 <td valign="bottom"><b>
515 <table cellspacing=5 cellpadding=0 border=0>
525 This macro retrieves the comparison function pointer.<dl compact><dt>
526 <b>Parameters: </b><dd>
527 <table border=0 cellspacing=2 cellpadding=0>
528 <tr><td valign=top><em>table</em>
530 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>.
534 </dl><dl compact><dt>
536 A <a class="el" href="group__dbprim__hash.html#a4">hash_comp_t</a>. </dl> </td>
539 <a name="a23" doxytag="dbprim.h.top::ht_count"></a><p>
540 <table width="100%" cellpadding="2" cellspacing="0" border="0">
543 <table cellpadding="0" cellspacing="0" border="0">
545 <td nowrap valign="top"><b>
548 <td valign="bottom"><b>
554 <table cellspacing=5 cellpadding=0 border=0>
564 This macro retrieves the total number of items actually in the hash table.<dl compact><dt>
565 <b>Parameters: </b><dd>
566 <table border=0 cellspacing=2 cellpadding=0>
567 <tr><td valign=top><em>table</em>
569 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>.
573 </dl><dl compact><dt>
575 An <code>unsigned long</code> containing a count of the number of items in the hash table. </dl> </td>
578 <a name="a27" doxytag="dbprim.h.top::ht_extra"></a><p>
579 <table width="100%" cellpadding="2" cellspacing="0" border="0">
582 <table cellpadding="0" cellspacing="0" border="0">
584 <td nowrap valign="top"><b>
587 <td valign="bottom"><b>
593 <table cellspacing=5 cellpadding=0 border=0>
603 This macro retrieves the extra pointer data associated with a particular hash table.<dl compact><dt>
604 <b>Parameters: </b><dd>
605 <table border=0 cellspacing=2 cellpadding=0>
606 <tr><td valign=top><em>table</em>
608 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>.
612 </dl><dl compact><dt>
614 A pointer to <code>void</code>. </dl> </td>
617 <a name="a20" doxytag="dbprim.h.top::ht_flags"></a><p>
618 <table width="100%" cellpadding="2" cellspacing="0" border="0">
621 <table cellpadding="0" cellspacing="0" border="0">
623 <td nowrap valign="top"><b>
626 <td valign="bottom"><b>
632 <table cellspacing=5 cellpadding=0 border=0>
642 This macro retrieves the flags associated with the hash table. Only <a class="el" href="group__dbprim__hash.html#a16">HASH_FLAG_AUTOGROW</a> and <a class="el" href="group__dbprim__hash.html#a17">HASH_FLAG_AUTOSHRINK</a> have any meaning to the application; all other bits are reserved for use in the library. This macro may be used as an lvalue, but care must be taken to avoid modifying the library-specific bits.<dl compact><dt>
643 <b>Parameters: </b><dd>
644 <table border=0 cellspacing=2 cellpadding=0>
645 <tr><td valign=top><em>table</em>
647 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>.
651 </dl><dl compact><dt>
653 An <code>unsigned long</code> containing the flags for the hash table. </dl> </td>
656 <a name="a21" doxytag="dbprim.h.top::ht_frozen"></a><p>
657 <table width="100%" cellpadding="2" cellspacing="0" border="0">
660 <table cellpadding="0" cellspacing="0" border="0">
662 <td nowrap valign="top"><b>
665 <td valign="bottom"><b>
671 <table cellspacing=5 cellpadding=0 border=0>
681 This macro returns a non-zero value if the table is currently frozen. The hash table may be frozen if there is an iteration in progress.<dl compact><dt>
682 <b>Parameters: </b><dd>
683 <table border=0 cellspacing=2 cellpadding=0>
684 <tr><td valign=top><em>table</em>
686 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>.
690 </dl><dl compact><dt>
692 A zero value if the table is not frozen or a non-zero value if the table is frozen. </dl> </td>
695 <a name="a24" doxytag="dbprim.h.top::ht_func"></a><p>
696 <table width="100%" cellpadding="2" cellspacing="0" border="0">
699 <table cellpadding="0" cellspacing="0" border="0">
701 <td nowrap valign="top"><b>
704 <td valign="bottom"><b>
710 <table cellspacing=5 cellpadding=0 border=0>
720 This macro retrieves the hash function pointer.<dl compact><dt>
721 <b>Parameters: </b><dd>
722 <table border=0 cellspacing=2 cellpadding=0>
723 <tr><td valign=top><em>table</em>
725 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>.
729 </dl><dl compact><dt>
731 A <a class="el" href="group__dbprim__hash.html#a3">hash_func_t</a>. </dl> </td>
734 <a name="a22" doxytag="dbprim.h.top::ht_modulus"></a><p>
735 <table width="100%" cellpadding="2" cellspacing="0" border="0">
738 <table cellpadding="0" cellspacing="0" border="0">
740 <td nowrap valign="top"><b>
743 <td valign="bottom"><b>
749 <table cellspacing=5 cellpadding=0 border=0>
759 This macro retrieves the number of buckets allocated for the hash table. An application may wish to save this value between invocations to avoid the overhead of growing the table while filling it with data.<dl compact><dt>
760 <b>Parameters: </b><dd>
761 <table border=0 cellspacing=2 cellpadding=0>
762 <tr><td valign=top><em>table</em>
764 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>.
768 </dl><dl compact><dt>
770 An <code>unsigned long</code> containing the number of buckets allocated for the hash table. </dl> </td>
773 <a name="a26" doxytag="dbprim.h.top::ht_rsize"></a><p>
774 <table width="100%" cellpadding="2" cellspacing="0" border="0">
777 <table cellpadding="0" cellspacing="0" border="0">
779 <td nowrap valign="top"><b>
782 <td valign="bottom"><b>
788 <table cellspacing=5 cellpadding=0 border=0>
798 This macro retrieves the resize callback function pointer.<dl compact><dt>
799 <b>Parameters: </b><dd>
800 <table border=0 cellspacing=2 cellpadding=0>
801 <tr><td valign=top><em>table</em>
803 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>.
807 </dl><dl compact><dt>
809 A <a class="el" href="group__dbprim__hash.html#a5">hash_resize_t</a>. </dl> </td>
812 <a name="a28" doxytag="dbprim.h.top::ht_size"></a><p>
813 <table width="100%" cellpadding="2" cellspacing="0" border="0">
816 <table cellpadding="0" cellspacing="0" border="0">
818 <td nowrap valign="top"><b>
821 <td valign="bottom"><b>
827 <table cellspacing=5 cellpadding=0 border=0>
837 This macro returns the physical size of the bucket array allocated by the library for this hash table.<dl compact><dt>
838 <b>Parameters: </b><dd>
839 <table border=0 cellspacing=2 cellpadding=0>
840 <tr><td valign=top><em>table</em>
842 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>.
846 </dl><dl compact><dt>
848 A <code>size_t</code>. </dl> </td>
851 <a name="a19" doxytag="dbprim.h.top::ht_verify"></a><p>
852 <table width="100%" cellpadding="2" cellspacing="0" border="0">
855 <table cellpadding="0" cellspacing="0" border="0">
857 <td nowrap valign="top"><b>
860 <td valign="bottom"><b>
866 <table cellspacing=5 cellpadding=0 border=0>
876 This macro verifies that a given pointer actually does point to a hash table.<dl compact><dt>
877 <b>Parameters: </b><dd>
878 <table border=0 cellspacing=2 cellpadding=0>
879 <tr><td valign=top><em>table</em>
881 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>.
885 </dl><dl compact><dt>
887 Boolean true if <code>table</code> is a valid hash table or false otherwise. </dl> </td>
890 <a name="a37" doxytag="dbprim.h.top::st_rsize"></a><p>
891 <table width="100%" cellpadding="2" cellspacing="0" border="0">
894 <table cellpadding="0" cellspacing="0" border="0">
896 <td nowrap valign="top"><b>
899 <td valign="bottom"><b>
905 <table cellspacing=5 cellpadding=0 border=0>
915 This macro retrieves the resize callback function pointer.<dl compact><dt>
916 <b>Parameters: </b><dd>
917 <table border=0 cellspacing=2 cellpadding=0>
918 <tr><td valign=top><em>table</em>
920 A pointer to a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>.
924 </dl><dl compact><dt>
926 A <a class="el" href="group__dbprim__smat.html#a3">smat_resize_t</a>. </dl> </td>
929 <hr><h2>Typedef Documentation</h2>
930 <a name="a4" doxytag="dbprim.h.top::hash_comp_t"></a><p>
931 <table width="100%" cellpadding="2" cellspacing="0" border="0">
934 <table cellpadding="0" cellspacing="0" border="0">
936 <td nowrap valign="top"><b>
937 typedef unsigned long(* hash_comp_t)(<a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> *, <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> *, <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> *)
945 <table cellspacing=5 cellpadding=0 border=0>
955 This function pointer references a callback used to compare entries in a hash table. It should return 0 for identical entries and non-zero otherwise. No assumptions should be made about the order in which the two keys are passed to this function. </td>
958 <a name="a1" doxytag="dbprim.h.top::hash_entry_t"></a><p>
959 <table width="100%" cellpadding="2" cellspacing="0" border="0">
962 <table cellpadding="0" cellspacing="0" border="0">
964 <td nowrap valign="top"><b>
965 typedef struct _hash_entry_s hash_entry_t
973 <table cellspacing=5 cellpadding=0 border=0>
983 This structure represents a single entry of a hash table. </td>
986 <a name="a3" doxytag="dbprim.h.top::hash_func_t"></a><p>
987 <table width="100%" cellpadding="2" cellspacing="0" border="0">
990 <table cellpadding="0" cellspacing="0" border="0">
992 <td nowrap valign="top"><b>
993 typedef unsigned long(* hash_func_t)(<a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> *, <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> *)
1001 <table cellspacing=5 cellpadding=0 border=0>
1011 This function is associated with a hash table, and is responsible for generating a hash value. The full 32-bit range of an <code>unsigned long</code> should be used--do *not* reduce the hash value by the modulus of the hash table. </td>
1014 <a name="a2" doxytag="dbprim.h.top::hash_iter_t"></a><p>
1015 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1018 <table cellpadding="0" cellspacing="0" border="0">
1020 <td nowrap valign="top"><b>
1021 typedef unsigned long(* hash_iter_t)(<a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> *, <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a> *, void *)
1029 <table cellspacing=5 cellpadding=0 border=0>
1039 This function pointer references a callback used by <a class="el" href="group__dbprim__hash.html#a11">ht_iter</a>() and <a class="el" href="group__dbprim__hash.html#a12">ht_flush</a>(). It should return 0 for success. A non-zero return value will terminate the operation and will become the return value of the <a class="el" href="group__dbprim__hash.html#a11">ht_iter</a>() or <a class="el" href="group__dbprim__hash.html#a12">ht_flush</a>() call. </td>
1042 <a name="a5" doxytag="dbprim.h.top::hash_resize_t"></a><p>
1043 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1046 <table cellpadding="0" cellspacing="0" border="0">
1048 <td nowrap valign="top"><b>
1049 typedef unsigned long(* hash_resize_t)(<a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> *, unsigned long)
1057 <table cellspacing=5 cellpadding=0 border=0>
1067 This function pointer references a callback that will be called with both the old and new hash table sizes whenever a hash table is resized. It should return non-zero only when the resize should be inhibited. </td>
1070 <a name="a0" doxytag="dbprim.h.top::hash_table_t"></a><p>
1071 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1074 <table cellpadding="0" cellspacing="0" border="0">
1076 <td nowrap valign="top"><b>
1077 typedef struct _hash_table_s hash_table_t
1085 <table cellspacing=5 cellpadding=0 border=0>
1095 This structure is the basis of all hash tables maintained by this library. </td>
1098 <hr><h2>Function Documentation</h2>
1099 <a name="a15" doxytag="he_init.c::he_init"></a><p>
1100 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1103 <table cellpadding="0" cellspacing="0" border="0">
1105 <td nowrap valign="top"><b>
1106 unsigned long he_init (
1108 <td valign="bottom"><b>
1109 <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a> * <em>entry</em>,
1115 void * <em>value</em> )
1123 <table cellspacing=5 cellpadding=0 border=0>
1133 This function dynamically initializes a hash table entry.<dl compact><dt>
1134 <b>Parameters: </b><dd>
1135 <table border=0 cellspacing=2 cellpadding=0>
1136 <tr><td valign=top><em>entry</em>
1138 A pointer to a <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a> to be initialized. </td></tr>
1139 <tr><td valign=top><em>value</em>
1141 A pointer to <code>void</code> which will be the value of the hash table entry.</td></tr>
1143 </dl><dl compact><dt>
1144 <b>Return values: </b><dd>
1145 <table border=0 cellspacing=2 cellpadding=0>
1146 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1148 A <code>NULL</code> pointer was passed for <code>entry</code>. </td></tr>
1153 <a name="a7" doxytag="ht_add.c::ht_add"></a><p>
1154 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1157 <table cellpadding="0" cellspacing="0" border="0">
1159 <td nowrap valign="top"><b>
1160 unsigned long ht_add (
1162 <td valign="bottom"><b>
1163 <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> * <em>table</em>,
1169 <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a> * <em>entry</em>,
1175 <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> * <em>key</em> )
1183 <table cellspacing=5 cellpadding=0 border=0>
1193 This function adds an entry to a hash table.<dl compact><dt>
1194 <b>Parameters: </b><dd>
1195 <table border=0 cellspacing=2 cellpadding=0>
1196 <tr><td valign=top><em>table</em>
1198 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>. </td></tr>
1199 <tr><td valign=top><em>entry</em>
1201 A pointer to a <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a> to be added to the table. </td></tr>
1202 <tr><td valign=top><em>key</em>
1204 A pointer to a <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> containing the key for the entry.</td></tr>
1206 </dl><dl compact><dt>
1207 <b>Return values: </b><dd>
1208 <table border=0 cellspacing=2 cellpadding=0>
1209 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1211 An invalid argument was given. </td></tr>
1212 <tr><td valign=top><em>DB_ERR_BUSY</em>
1214 The entry is already in a table. </td></tr>
1215 <tr><td valign=top><em>DB_ERR_FROZEN</em>
1217 The table is currently frozen. </td></tr>
1218 <tr><td valign=top><em>DB_ERR_NOTABLE</em>
1220 The bucket table has not been allocated and automatic growth is not enabled. </td></tr>
1221 <tr><td valign=top><em>DB_ERR_DUPLICATE</em>
1223 The entry is a duplicate of an existing entry. </td></tr>
1224 <tr><td valign=top><em>DB_ERR_UNRECOVERABLE</em>
1226 An unrecoverable error occurred while resizing the table. </td></tr>
1231 <a name="a10" doxytag="ht_find.c::ht_find"></a><p>
1232 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1235 <table cellpadding="0" cellspacing="0" border="0">
1237 <td nowrap valign="top"><b>
1238 unsigned long ht_find (
1240 <td valign="bottom"><b>
1241 <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> * <em>table</em>,
1247 <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a> ** <em>entry_p</em>,
1253 <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> * <em>key</em> )
1261 <table cellspacing=5 cellpadding=0 border=0>
1271 This function looks up an entry matching the given <code>key</code>.<dl compact><dt>
1272 <b>Parameters: </b><dd>
1273 <table border=0 cellspacing=2 cellpadding=0>
1274 <tr><td valign=top><em>table</em>
1276 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>. </td></tr>
1277 <tr><td valign=top><em>entry_p</em>
1279 A pointer to a pointer to a <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a>. This is a result parameter. If <code>NULL</code> is passed, the lookup will be performed and an appropriate error code returned. </td></tr>
1280 <tr><td valign=top><em>key</em>
1282 A pointer to a <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> describing the item to find.</td></tr>
1284 </dl><dl compact><dt>
1285 <b>Return values: </b><dd>
1286 <table border=0 cellspacing=2 cellpadding=0>
1287 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1289 An argument was invalid. </td></tr>
1290 <tr><td valign=top><em>DB_ERR_NOENTRY</em>
1292 No matching entry was found. </td></tr>
1297 <a name="a12" doxytag="ht_flush.c::ht_flush"></a><p>
1298 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1301 <table cellpadding="0" cellspacing="0" border="0">
1303 <td nowrap valign="top"><b>
1304 unsigned long ht_flush (
1306 <td valign="bottom"><b>
1307 <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> * <em>table</em>,
1313 <a class="el" href="group__dbprim__hash.html#a2">hash_iter_t</a> <em>flush_func</em>,
1319 void * <em>extra</em> )
1327 <table cellspacing=5 cellpadding=0 border=0>
1337 This function flushes a hash table--that is, it removes each entry from the table. If a <code>flush_func</code> is specified, it will be called on the entry after it has been removed from the table, and may safely call <code>free()</code>.<dl compact><dt>
1338 <b>Parameters: </b><dd>
1339 <table border=0 cellspacing=2 cellpadding=0>
1340 <tr><td valign=top><em>table</em>
1342 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>. </td></tr>
1343 <tr><td valign=top><em>flush_func</em>
1345 A pointer to a callback function used to perform user-specified actions on an entry after removing it from the table. May be <code>NULL</code>. See the documentation for <a class="el" href="group__dbprim__hash.html#a2">hash_iter_t</a> for more information. </td></tr>
1346 <tr><td valign=top><em>extra</em>
1348 A <code>void</code> pointer that will be passed to <code>flush_func</code>.</td></tr>
1350 </dl><dl compact><dt>
1351 <b>Return values: </b><dd>
1352 <table border=0 cellspacing=2 cellpadding=0>
1353 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1355 An argument was invalid. </td></tr>
1356 <tr><td valign=top><em>DB_ERR_FROZEN</em>
1358 The hash table is frozen. </td></tr>
1363 <a name="a14" doxytag="ht_free.c::ht_free"></a><p>
1364 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1367 <table cellpadding="0" cellspacing="0" border="0">
1369 <td nowrap valign="top"><b>
1370 unsigned long ht_free (
1372 <td valign="bottom"><b>
1373 <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> * <em>table</em> )
1381 <table cellspacing=5 cellpadding=0 border=0>
1391 This function releases the memory used by the bucket table in an empty hash table.<dl compact><dt>
1392 <b>Parameters: </b><dd>
1393 <table border=0 cellspacing=2 cellpadding=0>
1394 <tr><td valign=top><em>table</em>
1396 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>.</td></tr>
1398 </dl><dl compact><dt>
1399 <b>Return values: </b><dd>
1400 <table border=0 cellspacing=2 cellpadding=0>
1401 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1403 An invalid argument was given. </td></tr>
1404 <tr><td valign=top><em>DB_ERR_FROZEN</em>
1406 The table is frozen. </td></tr>
1407 <tr><td valign=top><em>DB_ERR_NOTEMPTY</em>
1409 The table is not empty. </td></tr>
1414 <a name="a6" doxytag="ht_init.c::ht_init"></a><p>
1415 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1418 <table cellpadding="0" cellspacing="0" border="0">
1420 <td nowrap valign="top"><b>
1421 unsigned long ht_init (
1423 <td valign="bottom"><b>
1424 <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> * <em>table</em>,
1430 unsigned long <em>flags</em>,
1436 <a class="el" href="group__dbprim__hash.html#a3">hash_func_t</a> <em>func</em>,
1442 <a class="el" href="group__dbprim__hash.html#a4">hash_comp_t</a> <em>comp</em>,
1448 <a class="el" href="group__dbprim__hash.html#a5">hash_resize_t</a> <em>resize</em>,
1454 void * <em>extra</em>,
1460 unsigned long <em>init_mod</em> )
1468 <table cellspacing=5 cellpadding=0 border=0>
1478 This function dynamically initializes a hash table.<dl compact><dt>
1479 <b>Parameters: </b><dd>
1480 <table border=0 cellspacing=2 cellpadding=0>
1481 <tr><td valign=top><em>table</em>
1483 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> to be initialized. </td></tr>
1484 <tr><td valign=top><em>flags</em>
1486 A bit-wise OR of <a class="el" href="group__dbprim__hash.html#a16">HASH_FLAG_AUTOGROW</a> and <a class="el" href="group__dbprim__hash.html#a17">HASH_FLAG_AUTOSHRINK</a>. If neither behavior is desired, use 0. </td></tr>
1487 <tr><td valign=top><em>func</em>
1489 A <a class="el" href="group__dbprim__hash.html#a3">hash_func_t</a> function pointer for a hash function. </td></tr>
1490 <tr><td valign=top><em>comp</em>
1492 A <a class="el" href="group__dbprim__hash.html#a4">hash_comp_t</a> function pointer for a comparison function. </td></tr>
1493 <tr><td valign=top><em>resize</em>
1495 A <a class="el" href="group__dbprim__hash.html#a5">hash_resize_t</a> function pointer for determining whether resizing is permitted and/or for notification of the resize. </td></tr>
1496 <tr><td valign=top><em>extra</em>
1498 Extra pointer data that should be associated with the hash table. </td></tr>
1499 <tr><td valign=top><em>init_mod</em>
1501 An initial modulus for the table. This will presumably be extracted by <a class="el" href="group__dbprim__hash.html#a22">ht_modulus</a>() in a previous invocation of the application. A 0 value is valid.</td></tr>
1503 </dl><dl compact><dt>
1504 <b>Return values: </b><dd>
1505 <table border=0 cellspacing=2 cellpadding=0>
1506 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1508 An invalid argument was given. </td></tr>
1509 <tr><td valign=top><em>ENOMEM</em>
1511 Unable to allocate memory. </td></tr>
1516 <a name="a11" doxytag="ht_iter.c::ht_iter"></a><p>
1517 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1520 <table cellpadding="0" cellspacing="0" border="0">
1522 <td nowrap valign="top"><b>
1523 unsigned long ht_iter (
1525 <td valign="bottom"><b>
1526 <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> * <em>table</em>,
1532 <a class="el" href="group__dbprim__hash.html#a2">hash_iter_t</a> <em>iter_func</em>,
1538 void * <em>extra</em> )
1546 <table cellspacing=5 cellpadding=0 border=0>
1556 This function iterates over every entry in a hash table (in an unspecified order), executing the given <code>iter_func</code> on each entry.<dl compact><dt>
1557 <b>Parameters: </b><dd>
1558 <table border=0 cellspacing=2 cellpadding=0>
1559 <tr><td valign=top><em>table</em>
1561 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>. </td></tr>
1562 <tr><td valign=top><em>iter_func</em>
1564 A pointer to a callback function used to perform user-specified actions on an entry in a hash table. <code>NULL</code> is an invalid value. See the documentation for <a class="el" href="group__dbprim__hash.html#a2">hash_iter_t</a> for more information. </td></tr>
1565 <tr><td valign=top><em>extra</em>
1567 A <code>void</code> pointer that will be passed to <code>iter_func</code>.</td></tr>
1569 </dl><dl compact><dt>
1570 <b>Return values: </b><dd>
1571 <table border=0 cellspacing=2 cellpadding=0>
1572 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1574 An argument was invalid. </td></tr>
1575 <tr><td valign=top><em>DB_ERR_FROZEN</em>
1577 The hash table is frozen. </td></tr>
1582 <a name="a8" doxytag="ht_move.c::ht_move"></a><p>
1583 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1586 <table cellpadding="0" cellspacing="0" border="0">
1588 <td nowrap valign="top"><b>
1589 unsigned long ht_move (
1591 <td valign="bottom"><b>
1592 <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> * <em>table</em>,
1598 <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a> * <em>entry</em>,
1604 <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> * <em>key</em> )
1612 <table cellspacing=5 cellpadding=0 border=0>
1622 This function moves an existing entry in the hash table to correspond to the new key.<dl compact><dt>
1623 <b>Parameters: </b><dd>
1624 <table border=0 cellspacing=2 cellpadding=0>
1625 <tr><td valign=top><em>table</em>
1627 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>. </td></tr>
1628 <tr><td valign=top><em>entry</em>
1630 A pointer to a <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a> to be moved. It must already be in the hash table. </td></tr>
1631 <tr><td valign=top><em>key</em>
1633 A pointer to a <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> describing the new key for the entry.</td></tr>
1635 </dl><dl compact><dt>
1636 <b>Return values: </b><dd>
1637 <table border=0 cellspacing=2 cellpadding=0>
1638 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1640 An invalid argument was given. </td></tr>
1641 <tr><td valign=top><em>DB_ERR_UNUSED</em>
1643 Entry is not in a hash table. </td></tr>
1644 <tr><td valign=top><em>DB_ERR_WRONGTABLE</em>
1646 Entry is not in this hash table. </td></tr>
1647 <tr><td valign=top><em>DB_ERR_FROZEN</em>
1649 Hash table is frozen. </td></tr>
1650 <tr><td valign=top><em>DB_ERR_DUPLICATE</em>
1652 New key is a duplicate of an existing key. </td></tr>
1653 <tr><td valign=top><em>DB_ERR_READDFAILED</em>
1655 Unable to re-add entry to table. </td></tr>
1660 <a name="a9" doxytag="ht_remove.c::ht_remove"></a><p>
1661 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1664 <table cellpadding="0" cellspacing="0" border="0">
1666 <td nowrap valign="top"><b>
1667 unsigned long ht_remove (
1669 <td valign="bottom"><b>
1670 <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> * <em>table</em>,
1676 <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a> * <em>entry</em> )
1684 <table cellspacing=5 cellpadding=0 border=0>
1694 This function removes the given element from the specified hash table.<dl compact><dt>
1695 <b>Parameters: </b><dd>
1696 <table border=0 cellspacing=2 cellpadding=0>
1697 <tr><td valign=top><em>table</em>
1699 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>. </td></tr>
1700 <tr><td valign=top><em>entry</em>
1702 A pointer to a <a class="el" href="group__dbprim__hash.html#a1">hash_entry_t</a> to be removed from the table.</td></tr>
1704 </dl><dl compact><dt>
1705 <b>Return values: </b><dd>
1706 <table border=0 cellspacing=2 cellpadding=0>
1707 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1709 An invalid argument was given. </td></tr>
1710 <tr><td valign=top><em>DB_ERR_UNUSED</em>
1712 Entry is not in a hash table. </td></tr>
1713 <tr><td valign=top><em>DB_ERR_WRONGTABLE</em>
1715 Entry is not in this hash table. </td></tr>
1716 <tr><td valign=top><em>DB_ERR_FROZEN</em>
1718 Hash table is frozen. </td></tr>
1719 <tr><td valign=top><em>DB_ERR_UNRECOVERABLE</em>
1721 An unrecoverable error occurred while resizing the table. </td></tr>
1726 <a name="a13" doxytag="ht_resize.c::ht_resize"></a><p>
1727 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1730 <table cellpadding="0" cellspacing="0" border="0">
1732 <td nowrap valign="top"><b>
1733 unsigned long ht_resize (
1735 <td valign="bottom"><b>
1736 <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a> * <em>table</em>,
1742 unsigned long <em>new_size</em> )
1750 <table cellspacing=5 cellpadding=0 border=0>
1760 This function resizes a hash table to the given <code>new_size</code>. If <code>new_size</code> is 0, then an appropriate new size based on the current number of items in the hash table will be selected.<dl compact><dt>
1761 <b>Parameters: </b><dd>
1762 <table border=0 cellspacing=2 cellpadding=0>
1763 <tr><td valign=top><em>table</em>
1765 A pointer to a <a class="el" href="group__dbprim__hash.html#a0">hash_table_t</a>. </td></tr>
1766 <tr><td valign=top><em>new_size</em>
1768 A new size value for the table.</td></tr>
1770 </dl><dl compact><dt>
1771 <b>Return values: </b><dd>
1772 <table border=0 cellspacing=2 cellpadding=0>
1773 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1775 An argument was invalid. </td></tr>
1776 <tr><td valign=top><em>DB_ERR_FROZEN</em>
1778 The table is currently frozen. </td></tr>
1779 <tr><td valign=top><em>DB_ERR_UNRECOVERABLE</em>
1781 A catastrophic error was encountered. The table is now unusable. </td></tr>
1782 <tr><td valign=top><em>ENOMEM</em>
1784 No memory could be allocated for the new bucket table. </td></tr>
1789 <hr><address><small>Generated at Thu Mar 6 21:23:10 2003 for dbprim by
1790 <a href="http://www.doxygen.org/index.html">
1791 <img src="doxygen.gif" alt="doxygen" align="middle" border=0
1792 width=110 height=53></a>1.2.8.1 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
1793 © 1997-2001</small></address>