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>Linked lists</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>Linked lists</h1>Operations for linked lists.
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__link.html#a13">LINK_HEAD_INIT</a>(extra)</td></tr>
13 <tr><td> </td><td><font size=-1><em>Linked list head static initializer.</em> <a href="#a13">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__link.html#a14">ll_verify</a>(list)</td></tr>
15 <tr><td> </td><td><font size=-1><em>Linked list head verification macro.</em> <a href="#a14">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__link.html#a15">ll_count</a>(list)</td></tr>
17 <tr><td> </td><td><font size=-1><em>Linked list count.</em> <a href="#a15">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__link.html#a16">ll_first</a>(list)</td></tr>
19 <tr><td> </td><td><font size=-1><em>First element in linked list.</em> <a href="#a16">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__link.html#a17">ll_last</a>(list)</td></tr>
21 <tr><td> </td><td><font size=-1><em>Last element in a linked list.</em> <a href="#a17">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__link.html#a18">ll_extra</a>(list)</td></tr>
23 <tr><td> </td><td><font size=-1><em>Extra pointer data in a linked list.</em> <a href="#a18">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__link.html#a19">LINK_ELEM_INIT</a>(obj)</td></tr>
25 <tr><td> </td><td><font size=-1><em>Linked list element static initializer.</em> <a href="#a19">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__link.html#a20">le_verify</a>(element)</td></tr>
27 <tr><td> </td><td><font size=-1><em>Linked list element verification macro.</em> <a href="#a20">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__link.html#a21">le_next</a>(elem)</td></tr>
29 <tr><td> </td><td><font size=-1><em>Linked list element next pointer.</em> <a href="#a21">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__link.html#a22">le_prev</a>(elem)</td></tr>
31 <tr><td> </td><td><font size=-1><em>Linked list element previous pointer.</em> <a href="#a22">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__link.html#a23">le_object</a>(elem)</td></tr>
33 <tr><td> </td><td><font size=-1><em>Linked list element object pointer.</em> <a href="#a23">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__link.html#a24">le_head</a>(elem)</td></tr>
35 <tr><td> </td><td><font size=-1><em>Linked list element head pointer.</em> <a href="#a24">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__link.html#a25">le_flags</a>(elem)</td></tr>
37 <tr><td> </td><td><font size=-1><em>Linked list element flags.</em> <a href="#a25">More...</a><em></em></font><br><br></td></tr>
38 <tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
39 <tr><td nowrap align=right valign=top>typedef struct _link_head_s </td><td valign=bottom><a class="el" href="group__dbprim__link.html#a0">link_head_t</a></td></tr>
40 <tr><td> </td><td><font size=-1><em>Linked list head.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
41 <tr><td nowrap align=right valign=top>typedef struct _link_elem_s </td><td valign=bottom><a class="el" href="group__dbprim__link.html#a1">link_elem_t</a></td></tr>
42 <tr><td> </td><td><font size=-1><em>Linked list element.</em> <a href="#a1">More...</a><em></em></font><br><br></td></tr>
43 <tr><td nowrap align=right valign=top>typedef unsigned long (* </td><td valign=bottom><a class="el" href="group__dbprim__link.html#a2">link_iter_t</a> )(<a class="el" href="group__dbprim__link.html#a0">link_head_t</a> *, <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> *, void *)</td></tr>
44 <tr><td> </td><td><font size=-1><em>Linked list iteration callback.</em> <a href="#a2">More...</a><em></em></font><br><br></td></tr>
45 <tr><td nowrap align=right valign=top>typedef unsigned long (* </td><td valign=bottom><a class="el" href="group__dbprim__link.html#a3">link_comp_t</a> )(<a class="el" href="group__dbprim__key.html#a0">db_key_t</a> *, void *)</td></tr>
46 <tr><td> </td><td><font size=-1><em>Linked list comparison callback.</em> <a href="#a3">More...</a><em></em></font><br><br></td></tr>
47 <tr><td nowrap align=right valign=top>typedef enum <a class="el" href="group__dbprim__link.html#a26">_link_loc_e</a> </td><td valign=bottom><a class="el" href="group__dbprim__link.html#a4">link_loc_t</a></td></tr>
48 <tr><td> </td><td><font size=-1><em>Linked list location.</em> <a href="#a4">More...</a><em></em></font><br><br></td></tr>
49 <tr><td colspan=2><br><h2>Enumerations</h2></td></tr>
50 <tr><td nowrap align=right valign=top>enum </td><td valign=bottom><a class="el" href="group__dbprim__link.html#a26">_link_loc_e</a> { <a class="el" href="group__dbprim__link.html#a26a98">LINK_LOC_HEAD</a>,
51 <a class="el" href="group__dbprim__link.html#a26a99">LINK_LOC_TAIL</a>,
52 <a class="el" href="group__dbprim__link.html#a26a100">LINK_LOC_BEFORE</a>,
53 <a class="el" href="group__dbprim__link.html#a26a101">LINK_LOC_AFTER</a>
55 <tr><td> </td><td><font size=-1><em>Linked list location.</em> <a href="#a26">More...</a><em></em></font><br><br></td></tr>
56 <tr><td colspan=2><br><h2>Functions</h2></td></tr>
57 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__link.html#a5">ll_init</a> (<a class="el" href="group__dbprim__link.html#a0">link_head_t</a> *list, void *extra)</td></tr>
58 <tr><td> </td><td><font size=-1><em>Dynamically initialize a linked list head.</em> <a href="#a5">More...</a><em></em></font><br><br></td></tr>
59 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__link.html#a6">ll_add</a> (<a class="el" href="group__dbprim__link.html#a0">link_head_t</a> *list, <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> *new, <a class="el" href="group__dbprim__link.html#a4">link_loc_t</a> loc, <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> *elem)</td></tr>
60 <tr><td> </td><td><font size=-1><em>Add an element to a linked list.</em> <a href="#a6">More...</a><em></em></font><br><br></td></tr>
61 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__link.html#a7">ll_move</a> (<a class="el" href="group__dbprim__link.html#a0">link_head_t</a> *list, <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> *new, <a class="el" href="group__dbprim__link.html#a4">link_loc_t</a> loc, <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> *elem)</td></tr>
62 <tr><td> </td><td><font size=-1><em>Move an element within a linked list.</em> <a href="#a7">More...</a><em></em></font><br><br></td></tr>
63 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__link.html#a8">ll_remove</a> (<a class="el" href="group__dbprim__link.html#a0">link_head_t</a> *list, <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> *elem)</td></tr>
64 <tr><td> </td><td><font size=-1><em>Remove an element from a linked list.</em> <a href="#a8">More...</a><em></em></font><br><br></td></tr>
65 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__link.html#a9">ll_find</a> (<a class="el" href="group__dbprim__link.html#a0">link_head_t</a> *list, <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> **elem_p, <a class="el" href="group__dbprim__link.html#a3">link_comp_t</a> comp_func, <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> *start, <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> *key)</td></tr>
66 <tr><td> </td><td><font size=-1><em>Find an element in a linked list.</em> <a href="#a9">More...</a><em></em></font><br><br></td></tr>
67 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__link.html#a10">ll_iter</a> (<a class="el" href="group__dbprim__link.html#a0">link_head_t</a> *list, <a class="el" href="group__dbprim__link.html#a2">link_iter_t</a> iter_func, void *extra)</td></tr>
68 <tr><td> </td><td><font size=-1><em>Iterate over each entry in a linked list.</em> <a href="#a10">More...</a><em></em></font><br><br></td></tr>
69 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__link.html#a11">ll_flush</a> (<a class="el" href="group__dbprim__link.html#a0">link_head_t</a> *list, <a class="el" href="group__dbprim__link.html#a2">link_iter_t</a> flush_func, void *extra)</td></tr>
70 <tr><td> </td><td><font size=-1><em>Flush a linked list.</em> <a href="#a11">More...</a><em></em></font><br><br></td></tr>
71 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__link.html#a12">le_init</a> (<a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> *elem, void *object)</td></tr>
72 <tr><td> </td><td><font size=-1><em>Dynamically initialize a linked list element.</em> <a href="#a12">More...</a><em></em></font><br><br></td></tr>
74 <hr><a name="_details"></a><h2>Detailed Description</h2>
75 Linked lists are a very basic data structure used in building databases. This library provides a simple yet powerful implementation of generic linked lists, based on two caller-allocated structures. The <a class="el" href="group__dbprim__link.html#a0">link_head_t</a> structure describes the head of a linked list and contains information regarding the number of elements in the linked list as well as pointers referencing the first and last elements in the list. The <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> structure describes a specific element in the linked list and contains pointers referencing the next and previous elements in the list, as well as a pointer to the object, a pointer to the head of the linked list, and a set of user-specified flags.
77 Elements may be added at any arbitrary location in the linked list with <a class="el" href="group__dbprim__link.html#a6">ll_add</a>(); moved to any other arbitrary location in the linked list with <a class="el" href="group__dbprim__link.html#a7">ll_move</a>(), or removed from the list with <a class="el" href="group__dbprim__link.html#a8">ll_remove</a>(). In addition, the user may search the list using a user-defined comparison function with <a class="el" href="group__dbprim__link.html#a9">ll_find</a>(); iterate over every element in the list with <a class="el" href="group__dbprim__link.html#a10">ll_iter</a>(); or remove all items from the list with <a class="el" href="group__dbprim__link.html#a11">ll_flush</a>(), optionally executing a user-specified clean-up function. <hr><h2>Define Documentation</h2>
78 <a name="a19" doxytag="dbprim.h.top::LINK_ELEM_INIT"></a><p>
79 <table width="100%" cellpadding="2" cellspacing="0" border="0">
82 <table cellpadding="0" cellspacing="0" border="0">
84 <td nowrap valign="top"><b>
85 #define LINK_ELEM_INIT(
87 <td valign="bottom"><b>
93 <table cellspacing=5 cellpadding=0 border=0>
103 This macro statically initializes a <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a>.<dl compact><dt>
104 <b>Parameters: </b><dd>
105 <table border=0 cellspacing=2 cellpadding=0>
106 <tr><td valign=top><em>obj</em>
108 A pointer to <code>void</code> representing the object associated with the element. </td></tr>
113 <a name="a13" doxytag="dbprim.h.top::LINK_HEAD_INIT"></a><p>
114 <table width="100%" cellpadding="2" cellspacing="0" border="0">
117 <table cellpadding="0" cellspacing="0" border="0">
119 <td nowrap valign="top"><b>
120 #define LINK_HEAD_INIT(
122 <td valign="bottom"><b>
128 <table cellspacing=5 cellpadding=0 border=0>
138 This macro statically initializes a <a class="el" href="group__dbprim__link.html#a0">link_head_t</a>.<dl compact><dt>
139 <b>Parameters: </b><dd>
140 <table border=0 cellspacing=2 cellpadding=0>
141 <tr><td valign=top><em>extra</em>
143 Extra pointer data that should be associated with the list head. </td></tr>
148 <a name="a25" doxytag="dbprim.h.top::le_flags"></a><p>
149 <table width="100%" cellpadding="2" cellspacing="0" border="0">
152 <table cellpadding="0" cellspacing="0" border="0">
154 <td nowrap valign="top"><b>
157 <td valign="bottom"><b>
163 <table cellspacing=5 cellpadding=0 border=0>
173 This macro retrieves a set of user-defined flags associated with the element. It may be used as an lvalue to set those flags.<dl compact><dt>
174 <b>Parameters: </b><dd>
175 <table border=0 cellspacing=2 cellpadding=0>
176 <tr><td valign=top><em>elem</em>
178 A pointer to a <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a>.
182 </dl><dl compact><dt>
184 An <code>unsigned long</code> containing the flags associated with the element. </dl> </td>
187 <a name="a24" doxytag="dbprim.h.top::le_head"></a><p>
188 <table width="100%" cellpadding="2" cellspacing="0" border="0">
191 <table cellpadding="0" cellspacing="0" border="0">
193 <td nowrap valign="top"><b>
196 <td valign="bottom"><b>
202 <table cellspacing=5 cellpadding=0 border=0>
212 This macro retrieves a pointer to the head of the linked list that the element is in.<dl compact><dt>
213 <b>Parameters: </b><dd>
214 <table border=0 cellspacing=2 cellpadding=0>
215 <tr><td valign=top><em>elem</em>
217 A pointer to a <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a>.
221 </dl><dl compact><dt>
223 A pointer to a <a class="el" href="group__dbprim__link.html#a0">link_head_t</a> representing the head of the linked list the element is in. </dl> </td>
226 <a name="a21" doxytag="dbprim.h.top::le_next"></a><p>
227 <table width="100%" cellpadding="2" cellspacing="0" border="0">
230 <table cellpadding="0" cellspacing="0" border="0">
232 <td nowrap valign="top"><b>
235 <td valign="bottom"><b>
241 <table cellspacing=5 cellpadding=0 border=0>
251 This macro retrieves a pointer to the next element in the linked list.<dl compact><dt>
252 <b>Parameters: </b><dd>
253 <table border=0 cellspacing=2 cellpadding=0>
254 <tr><td valign=top><em>elem</em>
256 A pointer to a <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a>.
260 </dl><dl compact><dt>
262 A pointer to a <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> representing the next element in the linked list. </dl> </td>
265 <a name="a23" doxytag="dbprim.h.top::le_object"></a><p>
266 <table width="100%" cellpadding="2" cellspacing="0" border="0">
269 <table cellpadding="0" cellspacing="0" border="0">
271 <td nowrap valign="top"><b>
274 <td valign="bottom"><b>
280 <table cellspacing=5 cellpadding=0 border=0>
290 This macro retrieves a pointer to the object represented by the element. It may be used as an lvalue to change the object pointed to. Care should be taken when using this feature.<dl compact><dt>
291 <b>Parameters: </b><dd>
292 <table border=0 cellspacing=2 cellpadding=0>
293 <tr><td valign=top><em>elem</em>
295 A pointer to a <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a>.
299 </dl><dl compact><dt>
301 A pointer to <code>void</code> representing the object associated with the linked list element. </dl> </td>
304 <a name="a22" doxytag="dbprim.h.top::le_prev"></a><p>
305 <table width="100%" cellpadding="2" cellspacing="0" border="0">
308 <table cellpadding="0" cellspacing="0" border="0">
310 <td nowrap valign="top"><b>
313 <td valign="bottom"><b>
319 <table cellspacing=5 cellpadding=0 border=0>
329 This macro retrieves a pointer to the previous element in the linked list.<dl compact><dt>
330 <b>Parameters: </b><dd>
331 <table border=0 cellspacing=2 cellpadding=0>
332 <tr><td valign=top><em>elem</em>
334 A pointer to a <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a>.
338 </dl><dl compact><dt>
340 A pointer to a <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> representing the previous element in the linked list. </dl> </td>
343 <a name="a20" doxytag="dbprim.h.top::le_verify"></a><p>
344 <table width="100%" cellpadding="2" cellspacing="0" border="0">
347 <table cellpadding="0" cellspacing="0" border="0">
349 <td nowrap valign="top"><b>
352 <td valign="bottom"><b>
358 <table cellspacing=5 cellpadding=0 border=0>
368 This macro verifies that a given pointer actually does point to a linked list element.<dl compact><dt>
369 <b>Parameters: </b><dd>
370 <table border=0 cellspacing=2 cellpadding=0>
371 <tr><td valign=top><em>element</em>
373 A pointer to a <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a>.
377 </dl><dl compact><dt>
379 Boolean true if <code>element</code> is a valid linked list element or false otherwise. </dl> </td>
382 <a name="a15" doxytag="dbprim.h.top::ll_count"></a><p>
383 <table width="100%" cellpadding="2" cellspacing="0" border="0">
386 <table cellpadding="0" cellspacing="0" border="0">
388 <td nowrap valign="top"><b>
391 <td valign="bottom"><b>
397 <table cellspacing=5 cellpadding=0 border=0>
407 This macro retrieves the number of elements in a linked list.<dl compact><dt>
408 <b>Parameters: </b><dd>
409 <table border=0 cellspacing=2 cellpadding=0>
410 <tr><td valign=top><em>list</em>
412 A pointer to a <a class="el" href="group__dbprim__link.html#a0">link_head_t</a>.
416 </dl><dl compact><dt>
418 An <code>unsigned long</code> containing a count of the number of elements in the linked list. </dl> </td>
421 <a name="a18" doxytag="dbprim.h.top::ll_extra"></a><p>
422 <table width="100%" cellpadding="2" cellspacing="0" border="0">
425 <table cellpadding="0" cellspacing="0" border="0">
427 <td nowrap valign="top"><b>
430 <td valign="bottom"><b>
436 <table cellspacing=5 cellpadding=0 border=0>
446 This macro retrieves the extra pointer data associated with a particular linked list.<dl compact><dt>
447 <b>Parameters: </b><dd>
448 <table border=0 cellspacing=2 cellpadding=0>
449 <tr><td valign=top><em>list</em>
451 A pointer to a <a class="el" href="group__dbprim__link.html#a0">link_head_t</a>.
455 </dl><dl compact><dt>
457 A pointer to <code>void</code>. </dl> </td>
460 <a name="a16" doxytag="dbprim.h.top::ll_first"></a><p>
461 <table width="100%" cellpadding="2" cellspacing="0" border="0">
464 <table cellpadding="0" cellspacing="0" border="0">
466 <td nowrap valign="top"><b>
469 <td valign="bottom"><b>
475 <table cellspacing=5 cellpadding=0 border=0>
485 This macro retrieves the first element in a linked list.<dl compact><dt>
486 <b>Parameters: </b><dd>
487 <table border=0 cellspacing=2 cellpadding=0>
488 <tr><td valign=top><em>list</em>
490 A pointer to a <a class="el" href="group__dbprim__link.html#a0">link_head_t</a>.
494 </dl><dl compact><dt>
496 A pointer to a <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a>. </dl> </td>
499 <a name="a17" doxytag="dbprim.h.top::ll_last"></a><p>
500 <table width="100%" cellpadding="2" cellspacing="0" border="0">
503 <table cellpadding="0" cellspacing="0" border="0">
505 <td nowrap valign="top"><b>
508 <td valign="bottom"><b>
514 <table cellspacing=5 cellpadding=0 border=0>
524 This macro retrieves the last element in a linked list.<dl compact><dt>
525 <b>Parameters: </b><dd>
526 <table border=0 cellspacing=2 cellpadding=0>
527 <tr><td valign=top><em>list</em>
529 A pointer to a <a class="el" href="group__dbprim__link.html#a0">link_head_t</a>.
533 </dl><dl compact><dt>
535 A pointer to a <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a>. </dl> </td>
538 <a name="a14" doxytag="dbprim.h.top::ll_verify"></a><p>
539 <table width="100%" cellpadding="2" cellspacing="0" border="0">
542 <table cellpadding="0" cellspacing="0" border="0">
544 <td nowrap valign="top"><b>
547 <td valign="bottom"><b>
553 <table cellspacing=5 cellpadding=0 border=0>
563 This macro verifies that a given pointer actually does point to a linked list head.<dl compact><dt>
564 <b>Parameters: </b><dd>
565 <table border=0 cellspacing=2 cellpadding=0>
566 <tr><td valign=top><em>list</em>
568 A pointer to a <a class="el" href="group__dbprim__link.html#a0">link_head_t</a>.
572 </dl><dl compact><dt>
574 Boolean true if <code>list</code> is a valid linked list head or false otherwise. </dl> </td>
577 <hr><h2>Typedef Documentation</h2>
578 <a name="a3" doxytag="dbprim.h.top::link_comp_t"></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>
585 typedef unsigned long(* link_comp_t)(<a class="el" href="group__dbprim__key.html#a0">db_key_t</a> *, void *)
593 <table cellspacing=5 cellpadding=0 border=0>
603 This function pointer references a callback used by <a class="el" href="group__dbprim__link.html#a9">ll_find</a>(). It should return 0 if the entry passed as the second argument matches the key passed as the first argument. </td>
606 <a name="a1" doxytag="dbprim.h.top::link_elem_t"></a><p>
607 <table width="100%" cellpadding="2" cellspacing="0" border="0">
610 <table cellpadding="0" cellspacing="0" border="0">
612 <td nowrap valign="top"><b>
613 typedef struct _link_elem_s link_elem_t
621 <table cellspacing=5 cellpadding=0 border=0>
631 This structure represents a single element of a linked list. </td>
634 <a name="a0" doxytag="dbprim.h.top::link_head_t"></a><p>
635 <table width="100%" cellpadding="2" cellspacing="0" border="0">
638 <table cellpadding="0" cellspacing="0" border="0">
640 <td nowrap valign="top"><b>
641 typedef struct _link_head_s link_head_t
649 <table cellspacing=5 cellpadding=0 border=0>
659 This structure is the head of all linked lists maintained by this library. </td>
662 <a name="a2" doxytag="dbprim.h.top::link_iter_t"></a><p>
663 <table width="100%" cellpadding="2" cellspacing="0" border="0">
666 <table cellpadding="0" cellspacing="0" border="0">
668 <td nowrap valign="top"><b>
669 typedef unsigned long(* link_iter_t)(<a class="el" href="group__dbprim__link.html#a0">link_head_t</a> *, <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> *, void *)
677 <table cellspacing=5 cellpadding=0 border=0>
687 This function pointer references a callback used by <a class="el" href="group__dbprim__link.html#a10">ll_iter</a>() and <a class="el" href="group__dbprim__link.html#a11">ll_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__link.html#a10">ll_iter</a>() or <a class="el" href="group__dbprim__link.html#a11">ll_flush</a>() call. </td>
690 <a name="a4" doxytag="dbprim.h.top::link_loc_t"></a><p>
691 <table width="100%" cellpadding="2" cellspacing="0" border="0">
694 <table cellpadding="0" cellspacing="0" border="0">
696 <td nowrap valign="top"><b>
697 typedef enum <a class="el" href="group__dbprim__link.html#a26">_link_loc_e</a> link_loc_t
705 <table cellspacing=5 cellpadding=0 border=0>
715 See the documentation for the enumeration <a class="el" href="group__dbprim__link.html#a26">_link_loc_e</a>. </td>
718 <hr><h2>Enumeration Type Documentation</h2>
719 <a name="a26" doxytag="dbprim.h.top::_link_loc_e"></a><p>
720 <table width="100%" cellpadding="2" cellspacing="0" border="0">
723 <table cellpadding="0" cellspacing="0" border="0">
725 <td nowrap valign="top"><b>
734 <table cellspacing=5 cellpadding=0 border=0>
744 This enumeration is used to specify where an element in a linked list should be placed. It should be referenced by the typedef <a class="el" href="group__dbprim__link.html#a4">link_loc_t</a>. <dl compact><dt>
745 <b>Enumeration values:</b><dd>
746 <table border=0 cellspacing=2 cellpadding=0>
747 <tr><td valign=top><a name="a26a98" doxytag="LINK_LOC_HEAD"></a><em>LINK_LOC_HEAD</em>
749 Element should be inserted at head of list. </td></tr>
750 <tr><td valign=top><a name="a26a99" doxytag="LINK_LOC_TAIL"></a><em>LINK_LOC_TAIL</em>
752 Element should be inserted at tail of list. </td></tr>
753 <tr><td valign=top><a name="a26a100" doxytag="LINK_LOC_BEFORE"></a><em>LINK_LOC_BEFORE</em>
755 Element should be inserted before specified element. </td></tr>
756 <tr><td valign=top><a name="a26a101" doxytag="LINK_LOC_AFTER"></a><em>LINK_LOC_AFTER</em>
758 Element should be inserted after specified element. </td></tr>
764 <hr><h2>Function Documentation</h2>
765 <a name="a12" doxytag="le_init.c::le_init"></a><p>
766 <table width="100%" cellpadding="2" cellspacing="0" border="0">
769 <table cellpadding="0" cellspacing="0" border="0">
771 <td nowrap valign="top"><b>
772 unsigned long le_init (
774 <td valign="bottom"><b>
775 <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> * <em>elem</em>,
781 void * <em>object</em> )
789 <table cellspacing=5 cellpadding=0 border=0>
799 This function dynamically initializes a linked list element.<dl compact><dt>
800 <b>Parameters: </b><dd>
801 <table border=0 cellspacing=2 cellpadding=0>
802 <tr><td valign=top><em>elem</em>
804 A pointer to a <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> to be initialized. </td></tr>
805 <tr><td valign=top><em>object</em>
807 A pointer to <code>void</code> used to represent the object associated with the element. May not be <code>NULL</code>.</td></tr>
809 </dl><dl compact><dt>
810 <b>Return values: </b><dd>
811 <table border=0 cellspacing=2 cellpadding=0>
812 <tr><td valign=top><em>DB_ERR_BADARGS</em>
814 A <code>NULL</code> pointer was passed for <code>elem</code> or <code>object</code>. </td></tr>
819 <a name="a6" doxytag="ll_add.c::ll_add"></a><p>
820 <table width="100%" cellpadding="2" cellspacing="0" border="0">
823 <table cellpadding="0" cellspacing="0" border="0">
825 <td nowrap valign="top"><b>
826 unsigned long ll_add (
828 <td valign="bottom"><b>
829 <a class="el" href="group__dbprim__link.html#a0">link_head_t</a> * <em>list</em>,
835 <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> * <em>new</em>,
841 <a class="el" href="group__dbprim__link.html#a4">link_loc_t</a> <em>loc</em>,
847 <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> * <em>elem</em> )
855 <table cellspacing=5 cellpadding=0 border=0>
865 This function adds a given element to a specified linked list in the specified location.<dl compact><dt>
866 <b>Parameters: </b><dd>
867 <table border=0 cellspacing=2 cellpadding=0>
868 <tr><td valign=top><em>list</em>
870 A pointer to a <a class="el" href="group__dbprim__link.html#a0">link_head_t</a>. </td></tr>
871 <tr><td valign=top><em>new</em>
873 A pointer to the <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> to be added to the linked list. </td></tr>
874 <tr><td valign=top><em>loc</em>
876 A <a class="el" href="group__dbprim__link.html#a4">link_loc_t</a> indicating where the entry should be added. </td></tr>
877 <tr><td valign=top><em>elem</em>
879 A pointer to a <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> describing another element in the list if <code>loc</code> is <a class="el" href="group__dbprim__link.html#a26a100">LINK_LOC_BEFORE</a> or <a class="el" href="group__dbprim__link.html#a26a101">LINK_LOC_AFTER</a>.</td></tr>
881 </dl><dl compact><dt>
882 <b>Return values: </b><dd>
883 <table border=0 cellspacing=2 cellpadding=0>
884 <tr><td valign=top><em>DB_ERR_BADARGS</em>
886 An argument was invalid. </td></tr>
887 <tr><td valign=top><em>DB_ERR_BUSY</em>
889 The element is already in a list. </td></tr>
890 <tr><td valign=top><em>DB_ERR_WRONGTABLE</em>
892 <code>elem</code> is in a different list. </td></tr>
893 <tr><td valign=top><em>DB_ERR_UNUSED</em>
895 <code>elem</code> is not in any list. </td></tr>
900 <a name="a9" doxytag="ll_find.c::ll_find"></a><p>
901 <table width="100%" cellpadding="2" cellspacing="0" border="0">
904 <table cellpadding="0" cellspacing="0" border="0">
906 <td nowrap valign="top"><b>
907 unsigned long ll_find (
909 <td valign="bottom"><b>
910 <a class="el" href="group__dbprim__link.html#a0">link_head_t</a> * <em>list</em>,
916 <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> ** <em>elem_p</em>,
922 <a class="el" href="group__dbprim__link.html#a3">link_comp_t</a> <em>comp_func</em>,
928 <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> * <em>start</em>,
934 <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> * <em>key</em> )
942 <table cellspacing=5 cellpadding=0 border=0>
952 This function iterates through a linked list looking for an element that matches the given <code>key</code>.<dl compact><dt>
953 <b>Parameters: </b><dd>
954 <table border=0 cellspacing=2 cellpadding=0>
955 <tr><td valign=top><em>list</em>
957 A pointer to a <a class="el" href="group__dbprim__link.html#a0">link_head_t</a>. </td></tr>
958 <tr><td valign=top><em>elem_p</em>
960 A pointer to a pointer to a <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a>. This is a result parameter. <code>NULL</code> is an invalid value. </td></tr>
961 <tr><td valign=top><em>comp_func</em>
963 A pointer to a comparison function used to compare the key to a particular element. See the documentation for <a class="el" href="group__dbprim__link.html#a3">link_comp_t</a> for more information. </td></tr>
964 <tr><td valign=top><em>start</em>
966 A pointer to a <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> describing where in the linked list to start. If <code>NULL</code> is passed, the beginning of the list will be assumed. </td></tr>
967 <tr><td valign=top><em>key</em>
969 A key to search for.</td></tr>
971 </dl><dl compact><dt>
972 <b>Return values: </b><dd>
973 <table border=0 cellspacing=2 cellpadding=0>
974 <tr><td valign=top><em>DB_ERR_BADARGS</em>
976 An argument was invalid. </td></tr>
977 <tr><td valign=top><em>DB_ERR_WRONGTABLE</em>
979 <code>start</code> is not in this linked list. </td></tr>
980 <tr><td valign=top><em>DB_ERR_NOENTRY</em>
982 No matching entry was found. </td></tr>
987 <a name="a11" doxytag="ll_flush.c::ll_flush"></a><p>
988 <table width="100%" cellpadding="2" cellspacing="0" border="0">
991 <table cellpadding="0" cellspacing="0" border="0">
993 <td nowrap valign="top"><b>
994 unsigned long ll_flush (
996 <td valign="bottom"><b>
997 <a class="el" href="group__dbprim__link.html#a0">link_head_t</a> * <em>list</em>,
1003 <a class="el" href="group__dbprim__link.html#a2">link_iter_t</a> <em>flush_func</em>,
1009 void * <em>extra</em> )
1017 <table cellspacing=5 cellpadding=0 border=0>
1027 This function flushes a linked list--that is, it removes each element from the list. If a <code>flush_func</code> is specified, it will be called on the entry after it has been removed from the list, and may safely call <code>free()</code>.<dl compact><dt>
1028 <b>Parameters: </b><dd>
1029 <table border=0 cellspacing=2 cellpadding=0>
1030 <tr><td valign=top><em>list</em>
1032 A pointer to a <a class="el" href="group__dbprim__link.html#a0">link_head_t</a>. </td></tr>
1033 <tr><td valign=top><em>flush_func</em>
1035 A pointer to a callback function used to perform user-specified actions on an element after removing it from the list. May be <code>NULL</code>. See the documentation for <a class="el" href="group__dbprim__link.html#a2">link_iter_t</a> for more information. </td></tr>
1036 <tr><td valign=top><em>extra</em>
1038 A <code>void</code> pointer that will be passed to <code>flush_func</code>.</td></tr>
1040 </dl><dl compact><dt>
1041 <b>Return values: </b><dd>
1042 <table border=0 cellspacing=2 cellpadding=0>
1043 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1045 An argument was invalid. </td></tr>
1050 <a name="a5" doxytag="ll_init.c::ll_init"></a><p>
1051 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1054 <table cellpadding="0" cellspacing="0" border="0">
1056 <td nowrap valign="top"><b>
1057 unsigned long ll_init (
1059 <td valign="bottom"><b>
1060 <a class="el" href="group__dbprim__link.html#a0">link_head_t</a> * <em>list</em>,
1066 void * <em>extra</em> )
1074 <table cellspacing=5 cellpadding=0 border=0>
1084 This function dynamically initializes a linked list head.<dl compact><dt>
1085 <b>Parameters: </b><dd>
1086 <table border=0 cellspacing=2 cellpadding=0>
1087 <tr><td valign=top><em>list</em>
1089 A pointer to a <a class="el" href="group__dbprim__link.html#a0">link_head_t</a> to be initialized. </td></tr>
1090 <tr><td valign=top><em>extra</em>
1092 A pointer to <code>void</code> containing extra pointer data associated with the linked list.</td></tr>
1094 </dl><dl compact><dt>
1095 <b>Return values: </b><dd>
1096 <table border=0 cellspacing=2 cellpadding=0>
1097 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1099 A <code>NULL</code> pointer was passed for <code>list</code>. </td></tr>
1104 <a name="a10" doxytag="ll_iter.c::ll_iter"></a><p>
1105 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1108 <table cellpadding="0" cellspacing="0" border="0">
1110 <td nowrap valign="top"><b>
1111 unsigned long ll_iter (
1113 <td valign="bottom"><b>
1114 <a class="el" href="group__dbprim__link.html#a0">link_head_t</a> * <em>list</em>,
1120 <a class="el" href="group__dbprim__link.html#a2">link_iter_t</a> <em>iter_func</em>,
1126 void * <em>extra</em> )
1134 <table cellspacing=5 cellpadding=0 border=0>
1144 This function iterates over a linked list, executing the given <code>iter_func</code> for each entry.<dl compact><dt>
1145 <b>Parameters: </b><dd>
1146 <table border=0 cellspacing=2 cellpadding=0>
1147 <tr><td valign=top><em>list</em>
1149 A pointer to a <a class="el" href="group__dbprim__link.html#a0">link_head_t</a>. </td></tr>
1150 <tr><td valign=top><em>iter_func</em>
1152 A pointer to a callback function used to perform user-specified actions on an element in a linked list. <code>NULL</code> is an invalid value. See the documentation for <a class="el" href="group__dbprim__link.html#a2">link_iter_t</a> for more information. </td></tr>
1153 <tr><td valign=top><em>extra</em>
1155 A <code>void</code> pointer that will be passed to <code>iter_func</code>.</td></tr>
1157 </dl><dl compact><dt>
1158 <b>Return values: </b><dd>
1159 <table border=0 cellspacing=2 cellpadding=0>
1160 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1162 An argument was invalid. </td></tr>
1167 <a name="a7" doxytag="ll_move.c::ll_move"></a><p>
1168 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1171 <table cellpadding="0" cellspacing="0" border="0">
1173 <td nowrap valign="top"><b>
1174 unsigned long ll_move (
1176 <td valign="bottom"><b>
1177 <a class="el" href="group__dbprim__link.html#a0">link_head_t</a> * <em>list</em>,
1183 <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> * <em>elem</em>,
1189 <a class="el" href="group__dbprim__link.html#a4">link_loc_t</a> <em>loc</em>,
1195 <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> * <em>elem2</em> )
1203 <table cellspacing=5 cellpadding=0 border=0>
1213 This function moves a specified element within the linked list.<dl compact><dt>
1214 <b>Parameters: </b><dd>
1215 <table border=0 cellspacing=2 cellpadding=0>
1216 <tr><td valign=top><em>list</em>
1218 A pointer to a <a class="el" href="group__dbprim__link.html#a0">link_head_t</a>. </td></tr>
1219 <tr><td valign=top><em>elem</em>
1221 A pointer to the <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> describing the element to be moved. </td></tr>
1222 <tr><td valign=top><em>loc</em>
1224 A <a class="el" href="group__dbprim__link.html#a4">link_loc_t</a> indicating where the entry should be moved to. </td></tr>
1225 <tr><td valign=top><em>elem2</em>
1227 A pointer to a <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> describing another element in the list if <code>loc</code> is <a class="el" href="group__dbprim__link.html#a26a100">LINK_LOC_BEFORE</a> or <a class="el" href="group__dbprim__link.html#a26a101">LINK_LOC_AFTER</a>.</td></tr>
1229 </dl><dl compact><dt>
1230 <b>Return values: </b><dd>
1231 <table border=0 cellspacing=2 cellpadding=0>
1232 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1234 An argument was invalid. </td></tr>
1235 <tr><td valign=top><em>DB_ERR_BUSY</em>
1237 <code>elem</code> and <code>elem2</code> are the same element. </td></tr>
1238 <tr><td valign=top><em>DB_ERR_WRONGTABLE</em>
1240 <code>elem</code> or <code>elem2</code> are in a different list. </td></tr>
1241 <tr><td valign=top><em>DB_ERR_UNUSED</em>
1243 <code>elem</code> or <code>elem2</code> are not in any list. </td></tr>
1248 <a name="a8" doxytag="ll_remove.c::ll_remove"></a><p>
1249 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1252 <table cellpadding="0" cellspacing="0" border="0">
1254 <td nowrap valign="top"><b>
1255 unsigned long ll_remove (
1257 <td valign="bottom"><b>
1258 <a class="el" href="group__dbprim__link.html#a0">link_head_t</a> * <em>list</em>,
1264 <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> * <em>elem</em> )
1272 <table cellspacing=5 cellpadding=0 border=0>
1282 This function removes a specified element from a linked list.<dl compact><dt>
1283 <b>Parameters: </b><dd>
1284 <table border=0 cellspacing=2 cellpadding=0>
1285 <tr><td valign=top><em>list</em>
1287 A pointer to a <a class="el" href="group__dbprim__link.html#a0">link_head_t</a>. </td></tr>
1288 <tr><td valign=top><em>elem</em>
1290 A pointer to the <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> describing the element to be removed.</td></tr>
1292 </dl><dl compact><dt>
1293 <b>Return values: </b><dd>
1294 <table border=0 cellspacing=2 cellpadding=0>
1295 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1297 An argument was invalid. </td></tr>
1298 <tr><td valign=top><em>DB_ERR_UNUSED</em>
1300 <code>elem</code> is not in a linked list. </td></tr>
1301 <tr><td valign=top><em>DB_ERR_WRONGTABLE</em>
1303 <code>elem</code> is not in this linked list. </td></tr>
1308 <hr><address><small>Generated at Thu Mar 6 21:23:10 2003 for dbprim by
1309 <a href="http://www.doxygen.org/index.html">
1310 <img src="doxygen.gif" alt="doxygen" align="middle" border=0
1311 width=110 height=53></a>1.2.8.1 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
1312 © 1997-2001</small></address>