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>Sparse matrices</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>Sparse matrices</h1>Operations for sparse matrices.
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__smat.html#a21">SMAT_TABLE_INIT</a>(flags, resize, extra)</td></tr>
13 <tr><td> </td><td><font size=-1><em>Sparse matrix table static initializer.</em> <a href="#a21">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__smat.html#a22">st_verify</a>(table)</td></tr>
15 <tr><td> </td><td><font size=-1><em>Sparse matrix table verification macro.</em> <a href="#a22">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__smat.html#a23">st_flags</a>(table)</td></tr>
17 <tr><td> </td><td><font size=-1><em>Sparse matrix table flags.</em> <a href="#a23">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__smat.html#a24">st_frozen</a>(table)</td></tr>
19 <tr><td> </td><td><font size=-1><em>Determine if a sparse matrix is frozen.</em> <a href="#a24">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__smat.html#a25">st_modulus</a>(table)</td></tr>
21 <tr><td> </td><td><font size=-1><em>Sparse matrix table modulus.</em> <a href="#a25">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__smat.html#a26">st_count</a>(table)</td></tr>
23 <tr><td> </td><td><font size=-1><em>Sparse matrix table count.</em> <a href="#a26">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__smat.html#a27">st_extra</a>(table)</td></tr>
25 <tr><td> </td><td><font size=-1><em>Extra pointer data in a sparse matrix table.</em> <a href="#a27">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__smat.html#a28">st_size</a>(table)</td></tr>
27 <tr><td> </td><td><font size=-1><em>Sparse matrix table memory size.</em> <a href="#a28">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__smat.html#a29">SMAT_HEAD_INIT</a>(elem, object)</td></tr>
29 <tr><td> </td><td><font size=-1><em>Sparse matrix list head static initializer.</em> <a href="#a29">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__smat.html#a30">sh_verify</a>(head)</td></tr>
31 <tr><td> </td><td><font size=-1><em>Sparse matrix list head verification macro.</em> <a href="#a30">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__smat.html#a31">sh_elem</a>(head)</td></tr>
33 <tr><td> </td><td><font size=-1><em>Sparse matrix list head element macro.</em> <a href="#a31">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__smat.html#a32">sh_table</a>(head)</td></tr>
35 <tr><td> </td><td><font size=-1><em>Sparse matrix list head table pointer.</em> <a href="#a32">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__smat.html#a33">sh_frozen</a>(head)</td></tr>
37 <tr><td> </td><td><font size=-1><em>Determine if a sparse matrix is frozen.</em> <a href="#a33">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__smat.html#a34">sh_count</a>(head)</td></tr>
39 <tr><td> </td><td><font size=-1><em>Sparse matrix list count.</em> <a href="#a34">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__smat.html#a35">sh_first</a>(head)</td></tr>
41 <tr><td> </td><td><font size=-1><em>First element in sparse matrix list.</em> <a href="#a35">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__smat.html#a36">sh_last</a>(head)</td></tr>
43 <tr><td> </td><td><font size=-1><em>Last element in sparse matrix list.</em> <a href="#a36">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__smat.html#a37">sh_object</a>(head)</td></tr>
45 <tr><td> </td><td><font size=-1><em>Object represented by a sparse matrix list head.</em> <a href="#a37">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__smat.html#a38">sh_size</a>(head)</td></tr>
47 <tr><td> </td><td><font size=-1><em>Sparse matrix list memory size.</em> <a href="#a38">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__smat.html#a39">se_verify</a>(entry)</td></tr>
49 <tr><td> </td><td><font size=-1><em>Sparse matrix entry verification macro.</em> <a href="#a39">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__smat.html#a40">se_table</a>(entry)</td></tr>
51 <tr><td> </td><td><font size=-1><em>Sparse matrix entry table.</em> <a href="#a40">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__smat.html#a41">_se_link</a>(entry)</td></tr>
53 <tr><td> </td><td><font size=-1><em>Sparse matrix entry linked list element.</em> <a href="#a41">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__smat.html#a42">se_flags</a>(entry)</td></tr>
55 <tr><td> </td><td><font size=-1><em>Sparse matrix entry flags.</em> <a href="#a42">More...</a><em></em></font><br><br></td></tr>
56 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a43">se_hash</a>(entry)</td></tr>
57 <tr><td> </td><td><font size=-1><em>Sparse matrix table entry hash value.</em> <a href="#a43">More...</a><em></em></font><br><br></td></tr>
58 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a44">se_next</a>(entry, n)</td></tr>
59 <tr><td> </td><td><font size=-1><em>Next element in sparse matrix list.</em> <a href="#a44">More...</a><em></em></font><br><br></td></tr>
60 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a45">se_prev</a>(entry, n)</td></tr>
61 <tr><td> </td><td><font size=-1><em>Previous element in sparse matrix list.</em> <a href="#a45">More...</a><em></em></font><br><br></td></tr>
62 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a46">se_lflags</a>(entry, n)</td></tr>
63 <tr><td> </td><td><font size=-1><em>Flags associated with an entry in a sparse matrix list.</em> <a href="#a46">More...</a><em></em></font><br><br></td></tr>
64 <tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a47">se_object</a>(entry, n)</td></tr>
65 <tr><td> </td><td><font size=-1><em>Object associated with an entry in a sparse matrix list.</em> <a href="#a47">More...</a><em></em></font><br><br></td></tr>
66 <tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
67 <tr><td nowrap align=right valign=top>typedef struct _smat_table_s </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a></td></tr>
68 <tr><td> </td><td><font size=-1><em>Sparse matrix table.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
69 <tr><td nowrap align=right valign=top>typedef struct _smat_head_s </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a></td></tr>
70 <tr><td> </td><td><font size=-1><em>Sparse matrix list head.</em> <a href="#a1">More...</a><em></em></font><br><br></td></tr>
71 <tr><td nowrap align=right valign=top>typedef struct _smat_entry_s </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a></td></tr>
72 <tr><td> </td><td><font size=-1><em>Sparse matrix entry.</em> <a href="#a2">More...</a><em></em></font><br><br></td></tr>
73 <tr><td nowrap align=right valign=top>typedef unsigned long (* </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a3">smat_resize_t</a> )(<a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> *, unsigned long)</td></tr>
74 <tr><td> </td><td><font size=-1><em>Sparse matrix table resize callback.</em> <a href="#a3">More...</a><em></em></font><br><br></td></tr>
75 <tr><td nowrap align=right valign=top>typedef unsigned long (* </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a4">smat_iter_t</a> )(<a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> *, <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> *, void *)</td></tr>
76 <tr><td> </td><td><font size=-1><em>Sparse matrix iteration callback.</em> <a href="#a4">More...</a><em></em></font><br><br></td></tr>
77 <tr><td nowrap align=right valign=top>typedef unsigned long (* </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a5">smat_comp_t</a> )(<a class="el" href="group__dbprim__key.html#a0">db_key_t</a> *, <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> *)</td></tr>
78 <tr><td> </td><td><font size=-1><em>Sparse matrix comparison callback.</em> <a href="#a5">More...</a><em></em></font><br><br></td></tr>
79 <tr><td nowrap align=right valign=top>typedef enum <a class="el" href="group__dbprim__smat.html#a48">_smat_loc_e</a> </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a6">smat_loc_t</a></td></tr>
80 <tr><td> </td><td><font size=-1><em>Sparse matrix location.</em> <a href="#a6">More...</a><em></em></font><br><br></td></tr>
81 <tr><td colspan=2><br><h2>Enumerations</h2></td></tr>
82 <tr><td nowrap align=right valign=top>enum </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a48">_smat_loc_e</a> { <a class="el" href="group__dbprim__smat.html#a48a102">SMAT_LOC_FIRST</a>,
83 <a class="el" href="group__dbprim__smat.html#a48a103">SMAT_LOC_SECOND</a>
85 <tr><td> </td><td><font size=-1><em>Sparse matrix location.</em> <a href="#a48">More...</a><em></em></font><br><br></td></tr>
86 <tr><td colspan=2><br><h2>Functions</h2></td></tr>
87 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a7">smat_cleanup</a> (void)</td></tr>
88 <tr><td> </td><td><font size=-1><em>Clean up the smat free list.</em> <a href="#a7">More...</a><em></em></font><br><br></td></tr>
89 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a8">smat_freemem</a> (void)</td></tr>
90 <tr><td> </td><td><font size=-1><em>Report how much memory is used by the free list.</em> <a href="#a8">More...</a><em></em></font><br><br></td></tr>
91 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a9">st_init</a> (<a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> *table, unsigned long flags, <a class="el" href="group__dbprim__smat.html#a3">smat_resize_t</a> resize, void *extra, unsigned long init_mod)</td></tr>
92 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a10">st_add</a> (<a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> *table, <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> **entry_p, <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> *head1, <a class="el" href="group__dbprim__link.html#a4">link_loc_t</a> loc1, <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> *ent1, <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> *head2, <a class="el" href="group__dbprim__link.html#a4">link_loc_t</a> loc2, <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> *ent2)</td></tr>
93 <tr><td> </td><td><font size=-1><em>Add an entry to a sparse matrix.</em> <a href="#a10">More...</a><em></em></font><br><br></td></tr>
94 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a11">st_remove</a> (<a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> *table, <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> *entry)</td></tr>
95 <tr><td> </td><td><font size=-1><em>Remove an entry from a sparse matrix.</em> <a href="#a11">More...</a><em></em></font><br><br></td></tr>
96 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a12">st_find</a> (<a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> *table, <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> **entry_p, <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> *head1, <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> *head2)</td></tr>
97 <tr><td> </td><td><font size=-1><em>Find an entry in a sparse matrix.</em> <a href="#a12">More...</a><em></em></font><br><br></td></tr>
98 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a13">st_iter</a> (<a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> *table, <a class="el" href="group__dbprim__smat.html#a4">smat_iter_t</a> iter_func, void *extra)</td></tr>
99 <tr><td> </td><td><font size=-1><em>Iterate over each entry in a sparse matrix.</em> <a href="#a13">More...</a><em></em></font><br><br></td></tr>
100 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a14">st_flush</a> (<a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> *table, <a class="el" href="group__dbprim__smat.html#a4">smat_iter_t</a> flush_func, void *extra)</td></tr>
101 <tr><td> </td><td><font size=-1><em>Flush a sparse matrix.</em> <a href="#a14">More...</a><em></em></font><br><br></td></tr>
102 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a15">st_resize</a> (<a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> *table, unsigned long new_size)</td></tr>
103 <tr><td> </td><td><font size=-1><em>Resize a sparse matrix table.</em> <a href="#a15">More...</a><em></em></font><br><br></td></tr>
104 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a16">st_free</a> (<a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> *table)</td></tr>
105 <tr><td> </td><td><font size=-1><em>Free memory used by an empty sparse matrix table.</em> <a href="#a16">More...</a><em></em></font><br><br></td></tr>
106 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a17">sh_init</a> (<a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> *head, <a class="el" href="group__dbprim__smat.html#a6">smat_loc_t</a> elem, void *object)</td></tr>
107 <tr><td> </td><td><font size=-1><em>Dynamically initialize a sparse matrix row or column head.</em> <a href="#a17">More...</a><em></em></font><br><br></td></tr>
108 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a18">sh_move</a> (<a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> *head, <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> *elem, <a class="el" href="group__dbprim__link.html#a4">link_loc_t</a> loc, <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> *elem2)</td></tr>
109 <tr><td> </td><td><font size=-1><em>Move an entry within a row or column list.</em> <a href="#a18">More...</a><em></em></font><br><br></td></tr>
110 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a19">sh_find</a> (<a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> *head, <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> **elem_p, <a class="el" href="group__dbprim__smat.html#a5">smat_comp_t</a> comp_func, <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> *start, <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> *key)</td></tr>
111 <tr><td> </td><td><font size=-1><em>Find an entry in a row or column of a sparse matrix.</em> <a href="#a19">More...</a><em></em></font><br><br></td></tr>
112 <tr><td nowrap align=right valign=top>unsigned long </td><td valign=bottom><a class="el" href="group__dbprim__smat.html#a20">sh_iter</a> (<a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> *head, <a class="el" href="group__dbprim__smat.html#a4">smat_iter_t</a> iter_func, void *extra)</td></tr>
113 <tr><td> </td><td><font size=-1><em>Iterate over each entry in a row or column of a sparse matrix.</em> <a href="#a20">More...</a><em></em></font><br><br></td></tr>
115 <hr><a name="_details"></a><h2>Detailed Description</h2>
116 Sparse matrices are advanced data structures used to represent associations. For instance, a manager may have several employees, but several of those employees may report to more than one manager. (Yes, this is a contrived example, so sue me.) The simplest way to represent such assocations is with a matrix, or a two-dimensional array. However, such an implementation cannot easily be extended dynamically--imagine if a manager retires and two more are hired, for instance. It would also use an enormous amount of memory, as most employees would only report to one or two managers.
118 A sparse matrix solves this problem by only allocating memory for the cells in the full matrix which are actually used. That is, no memory is allocated to represent Alice reporting to Bob unless Alice actually does report to Bob. This is a simple concept, but fairly difficult to implement efficiently--how do you tell if Alice reports to Bob? The solution utilized by this library is to combine the strengths of linked lists and hash tables. Each cell is in two linked lists, rooted at the rows and columns of the matrix, but a hash table is used when attempting to look up a given cell. If the cell is allocated, then there will be an entry in the hash table, and finding the given cell is as fast as a hash table look-up.
120 Because sparse matrices are so complicated, there are three structures and a variety of operations used. Two of the structures, <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> and <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a>, are caller-allocated. However, the third structure, <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a>, must be allocated by the library. To avoid too much overhead from malloc(), a free list is used. The free list may be managed with the <a class="el" href="group__dbprim__smat.html#a7">smat_cleanup</a>() and <a class="el" href="group__dbprim__smat.html#a8">smat_freemem</a>() calls.
122 The <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> contains the hash table. Only one of these need be allocated per type of association--for instance, in the above example, only one <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> needs to be allocated to represent the manager-employee relationship.
124 The <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> contains the linked list. There are actually two kinds of these structures--one is <a class="el" href="group__dbprim__smat.html#a48a102">SMAT_LOC_FIRST</a>, which could be regarded as a ``row,'' and the other is <a class="el" href="group__dbprim__smat.html#a48a103">SMAT_LOC_SECOND</a>, which could be regarded as a ``column.'' Which one is used for which type of data is irrelevant, as long as consistency is maintained. For the above example, a <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> for a manager may be <a class="el" href="group__dbprim__smat.html#a48a102">SMAT_LOC_FIRST</a>, and one for an employee must then be <a class="el" href="group__dbprim__smat.html#a48a103">SMAT_LOC_SECOND</a>. (These values are set when initializing the <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> structure.)
126 An association may be created with the <a class="el" href="group__dbprim__smat.html#a10">st_add</a>() function, which allows an arbitrary ordering in the associated linked lists by the same mechanism as for the linked list component of the library. An association may be removed with <a class="el" href="group__dbprim__smat.html#a11">st_remove</a>(), or looked up with <a class="el" href="group__dbprim__smat.html#a12">st_find</a>(). If iteration over all associations is desired, use the <a class="el" href="group__dbprim__smat.html#a13">st_iter</a>() function. Removing all associations from a table may be performed with <a class="el" href="group__dbprim__smat.html#a14">st_flush</a>(), which optionally calls a user-defined clean-up function. The associated hash table may be resized with <a class="el" href="group__dbprim__smat.html#a15">st_resize</a>(), and the bucket table may be released with <a class="el" href="group__dbprim__smat.html#a16">st_free</a>().
128 An association may also be reordered within the linked lists using the <a class="el" href="group__dbprim__smat.html#a18">sh_move</a>() function. If a particular entry is desired, use the <a class="el" href="group__dbprim__smat.html#a19">sh_find</a>() function with a user-defined comparison function to locate it. Iteration may be performed with the <a class="el" href="group__dbprim__smat.html#a20">sh_iter</a>() function, and all entries in a given linked list may be removed with the sh_flush() function, which again may optionally call a user-defined clean-up function. <hr><h2>Define Documentation</h2>
129 <a name="a29" doxytag="dbprim.h.top::SMAT_HEAD_INIT"></a><p>
130 <table width="100%" cellpadding="2" cellspacing="0" border="0">
133 <table cellpadding="0" cellspacing="0" border="0">
135 <td nowrap valign="top"><b>
136 #define SMAT_HEAD_INIT(
138 <td valign="bottom"><b>
144 <table cellspacing=5 cellpadding=0 border=0>
154 This macro statically initializes a <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a>.<dl compact><dt>
155 <b>Parameters: </b><dd>
156 <table border=0 cellspacing=2 cellpadding=0>
157 <tr><td valign=top><em>elem</em>
159 One of <a class="el" href="group__dbprim__smat.html#a48a102">SMAT_LOC_FIRST</a> or <a class="el" href="group__dbprim__smat.html#a48a103">SMAT_LOC_SECOND</a> specifing whether the object is a member of the set of rows or columns. </td></tr>
160 <tr><td valign=top><em>object</em>
162 A pointer to <code>void</code> representing the object associated with the list head. </td></tr>
167 <a name="a21" doxytag="dbprim.h.top::SMAT_TABLE_INIT"></a><p>
168 <table width="100%" cellpadding="2" cellspacing="0" border="0">
171 <table cellpadding="0" cellspacing="0" border="0">
173 <td nowrap valign="top"><b>
174 #define SMAT_TABLE_INIT(
176 <td valign="bottom"><b>
177 flags, resize, extra )
182 <table cellspacing=5 cellpadding=0 border=0>
192 This macro statically initializes a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>.<dl compact><dt>
193 <b>Parameters: </b><dd>
194 <table border=0 cellspacing=2 cellpadding=0>
195 <tr><td valign=top><em>flags</em>
197 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>
198 <tr><td valign=top><em>resize</em>
200 A <a class="el" href="group__dbprim__smat.html#a3">smat_resize_t</a> function pointer for determining whether resizing is permitted and/or for notification of the resize. </td></tr>
201 <tr><td valign=top><em>extra</em>
203 Extra pointer data that should be associated with the sparse matrix. </td></tr>
208 <a name="a41" doxytag="dbprim.h.top::_se_link"></a><p>
209 <table width="100%" cellpadding="2" cellspacing="0" border="0">
212 <table cellpadding="0" cellspacing="0" border="0">
214 <td nowrap valign="top"><b>
217 <td valign="bottom"><b>
223 <table cellspacing=5 cellpadding=0 border=0>
233 For internal use only. </td>
236 <a name="a42" doxytag="dbprim.h.top::se_flags"></a><p>
237 <table width="100%" cellpadding="2" cellspacing="0" border="0">
240 <table cellpadding="0" cellspacing="0" border="0">
242 <td nowrap valign="top"><b>
245 <td valign="bottom"><b>
251 <table cellspacing=5 cellpadding=0 border=0>
261 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>
262 <b>Parameters: </b><dd>
263 <table border=0 cellspacing=2 cellpadding=0>
264 <tr><td valign=top><em>entry</em>
266 A pointer to a <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a>.
270 </dl><dl compact><dt>
272 An <code>unsigned long</code> containing the flags associated with the entry. </dl> </td>
275 <a name="a43" doxytag="dbprim.h.top::se_hash"></a><p>
276 <table width="100%" cellpadding="2" cellspacing="0" border="0">
279 <table cellpadding="0" cellspacing="0" border="0">
281 <td nowrap valign="top"><b>
284 <td valign="bottom"><b>
290 <table cellspacing=5 cellpadding=0 border=0>
300 This macro retrieves the hash value of the given sparse matrix entry. If the sparse matrix hash been resized, this value may not be the same as a previous value.<dl compact><dt>
301 <b>Parameters: </b><dd>
302 <table border=0 cellspacing=2 cellpadding=0>
303 <tr><td valign=top><em>entry</em>
305 A pointer to a <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a>.
309 </dl><dl compact><dt>
311 An <code>unsigned long</code> containing the hash code for the entry. </dl> </td>
314 <a name="a46" doxytag="dbprim.h.top::se_lflags"></a><p>
315 <table width="100%" cellpadding="2" cellspacing="0" border="0">
318 <table cellpadding="0" cellspacing="0" border="0">
320 <td nowrap valign="top"><b>
323 <td valign="bottom"><b>
329 <table cellspacing=5 cellpadding=0 border=0>
339 This macro retrieves a set of user-defined flags associated with the entry in a sparse matrix list. It may be used as an lvalue to set those flags.<dl compact><dt>
340 <b>Parameters: </b><dd>
341 <table border=0 cellspacing=2 cellpadding=0>
342 <tr><td valign=top><em>entry</em>
344 A pointer to <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a>. </td></tr>
345 <tr><td valign=top><em>n</em>
347 One of <a class="el" href="group__dbprim__smat.html#a48a102">SMAT_LOC_FIRST</a> or <a class="el" href="group__dbprim__smat.html#a48a103">SMAT_LOC_SECOND</a> to specify which list thread is desired.
351 </dl><dl compact><dt>
353 An <code>unsigned long</code> containing the flags associated with the entry. </dl> </td>
356 <a name="a44" doxytag="dbprim.h.top::se_next"></a><p>
357 <table width="100%" cellpadding="2" cellspacing="0" border="0">
360 <table cellpadding="0" cellspacing="0" border="0">
362 <td nowrap valign="top"><b>
365 <td valign="bottom"><b>
371 <table cellspacing=5 cellpadding=0 border=0>
381 This macro retrieves a pointer to the <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> for the next element in the sparse matrix list.
385 This macro may evaluate the <code>entry</code> and <code>n</code> arguments twice.</dl><dl compact><dt>
386 <b>Parameters: </b><dd>
387 <table border=0 cellspacing=2 cellpadding=0>
388 <tr><td valign=top><em>entry</em>
390 A pointer to <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a>. </td></tr>
391 <tr><td valign=top><em>n</em>
393 One of <a class="el" href="group__dbprim__smat.html#a48a102">SMAT_LOC_FIRST</a> or <a class="el" href="group__dbprim__smat.html#a48a103">SMAT_LOC_SECOND</a> to specify which list thread is desired.
397 </dl><dl compact><dt>
399 A pointer to <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a>. </dl> </td>
402 <a name="a47" doxytag="dbprim.h.top::se_object"></a><p>
403 <table width="100%" cellpadding="2" cellspacing="0" border="0">
406 <table cellpadding="0" cellspacing="0" border="0">
408 <td nowrap valign="top"><b>
411 <td valign="bottom"><b>
417 <table cellspacing=5 cellpadding=0 border=0>
427 This macro retrieves a pointer to one of the object represented by the entry. It may be used as an lvalue to change the object pointed to. Care should be taken when using this feature.<dl compact><dt>
428 <b>Parameters: </b><dd>
429 <table border=0 cellspacing=2 cellpadding=0>
430 <tr><td valign=top><em>entry</em>
432 A pointer to <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a>. </td></tr>
433 <tr><td valign=top><em>n</em>
435 One of <a class="el" href="group__dbprim__smat.html#a48a102">SMAT_LOC_FIRST</a> or <a class="el" href="group__dbprim__smat.html#a48a103">SMAT_LOC_SECOND</a> to specify which list thread is desired.
439 </dl><dl compact><dt>
441 A pointer to <code>void</code> representing the object. </dl> </td>
444 <a name="a45" doxytag="dbprim.h.top::se_prev"></a><p>
445 <table width="100%" cellpadding="2" cellspacing="0" border="0">
448 <table cellpadding="0" cellspacing="0" border="0">
450 <td nowrap valign="top"><b>
453 <td valign="bottom"><b>
459 <table cellspacing=5 cellpadding=0 border=0>
469 This macro retrieves a pointer to the <a class="el" href="group__dbprim__link.html#a1">link_elem_t</a> for the previous element in the sparse matrix list.
473 This macro may evaluate the <code>entry</code> and <code>n</code> arguments twice.</dl><dl compact><dt>
474 <b>Parameters: </b><dd>
475 <table border=0 cellspacing=2 cellpadding=0>
476 <tr><td valign=top><em>entry</em>
478 A pointer to <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a>. </td></tr>
479 <tr><td valign=top><em>n</em>
481 One of <a class="el" href="group__dbprim__smat.html#a48a102">SMAT_LOC_FIRST</a> or <a class="el" href="group__dbprim__smat.html#a48a103">SMAT_LOC_SECOND</a> to specify which list thread is desired.
485 </dl><dl compact><dt>
487 A pointer to <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a>. </dl> </td>
490 <a name="a40" doxytag="dbprim.h.top::se_table"></a><p>
491 <table width="100%" cellpadding="2" cellspacing="0" border="0">
494 <table cellpadding="0" cellspacing="0" border="0">
496 <td nowrap valign="top"><b>
499 <td valign="bottom"><b>
505 <table cellspacing=5 cellpadding=0 border=0>
515 This macro retrieves a pointer to the table that the sparse matrix entry is in.<dl compact><dt>
516 <b>Parameters: </b><dd>
517 <table border=0 cellspacing=2 cellpadding=0>
518 <tr><td valign=top><em>entry</em>
520 A pointer to a <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a>.
524 </dl><dl compact><dt>
526 A pointer to a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>. </dl> </td>
529 <a name="a39" doxytag="dbprim.h.top::se_verify"></a><p>
530 <table width="100%" cellpadding="2" cellspacing="0" border="0">
533 <table cellpadding="0" cellspacing="0" border="0">
535 <td nowrap valign="top"><b>
538 <td valign="bottom"><b>
544 <table cellspacing=5 cellpadding=0 border=0>
554 This macro verifies that a given pointer actually does point to a sparse matrix entry.<dl compact><dt>
555 <b>Parameters: </b><dd>
556 <table border=0 cellspacing=2 cellpadding=0>
557 <tr><td valign=top><em>entry</em>
559 A pointer to a <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a>.
563 </dl><dl compact><dt>
565 Boolean true if <code>entry</code> is a valid sparse matrix entry or false otherwise. </dl> </td>
568 <a name="a34" doxytag="dbprim.h.top::sh_count"></a><p>
569 <table width="100%" cellpadding="2" cellspacing="0" border="0">
572 <table cellpadding="0" cellspacing="0" border="0">
574 <td nowrap valign="top"><b>
577 <td valign="bottom"><b>
583 <table cellspacing=5 cellpadding=0 border=0>
593 This macro retrieves the number of elements in the sparse matrix list rooted at <code>head</code>.<dl compact><dt>
594 <b>Parameters: </b><dd>
595 <table border=0 cellspacing=2 cellpadding=0>
596 <tr><td valign=top><em>head</em>
598 A pointer to <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a>.
602 </dl><dl compact><dt>
604 An <code>unsigned long</code> containing a count of the number of elements in the sparse matrix list. </dl> </td>
607 <a name="a31" doxytag="dbprim.h.top::sh_elem"></a><p>
608 <table width="100%" cellpadding="2" cellspacing="0" border="0">
611 <table cellpadding="0" cellspacing="0" border="0">
613 <td nowrap valign="top"><b>
616 <td valign="bottom"><b>
622 <table cellspacing=5 cellpadding=0 border=0>
632 This macro retrieves the position indicator for the sparse matrix head. It will return one of <a class="el" href="group__dbprim__smat.html#a48a102">SMAT_LOC_FIRST</a> or <a class="el" href="group__dbprim__smat.html#a48a103">SMAT_LOC_SECOND</a>.<dl compact><dt>
633 <b>Parameters: </b><dd>
634 <table border=0 cellspacing=2 cellpadding=0>
635 <tr><td valign=top><em>head</em>
637 A pointer to <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a>.
641 </dl><dl compact><dt>
643 An <a class="el" href="group__dbprim__smat.html#a6">smat_loc_t</a>. </dl> </td>
646 <a name="a35" doxytag="dbprim.h.top::sh_first"></a><p>
647 <table width="100%" cellpadding="2" cellspacing="0" border="0">
650 <table cellpadding="0" cellspacing="0" border="0">
652 <td nowrap valign="top"><b>
655 <td valign="bottom"><b>
661 <table cellspacing=5 cellpadding=0 border=0>
671 This macro retrieves a pointer to the <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> for the first element in the sparse matrix list.
675 This macro may evaluate the <code>head</code> argument twice.</dl><dl compact><dt>
676 <b>Parameters: </b><dd>
677 <table border=0 cellspacing=2 cellpadding=0>
678 <tr><td valign=top><em>head</em>
680 A pointer to <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a>.
684 </dl><dl compact><dt>
686 A pointer to <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a>. </dl> </td>
689 <a name="a33" doxytag="dbprim.h.top::sh_frozen"></a><p>
690 <table width="100%" cellpadding="2" cellspacing="0" border="0">
693 <table cellpadding="0" cellspacing="0" border="0">
695 <td nowrap valign="top"><b>
698 <td valign="bottom"><b>
704 <table cellspacing=5 cellpadding=0 border=0>
714 This macro returns a non-zero value if the matrix is currently frozen. The sparse matrix may be frozen if there is an iteration in progress.<dl compact><dt>
715 <b>Parameters: </b><dd>
716 <table border=0 cellspacing=2 cellpadding=0>
717 <tr><td valign=top><em>head</em>
719 A pointer to a <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a>.
723 </dl><dl compact><dt>
725 A zero value if the matrix is not frozen or a non-zero value if the matrix is frozen. </dl> </td>
728 <a name="a36" doxytag="dbprim.h.top::sh_last"></a><p>
729 <table width="100%" cellpadding="2" cellspacing="0" border="0">
732 <table cellpadding="0" cellspacing="0" border="0">
734 <td nowrap valign="top"><b>
737 <td valign="bottom"><b>
743 <table cellspacing=5 cellpadding=0 border=0>
753 This macro retrieves a pointer to the <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> for the last element in the sparse matrix list.
757 This macro may evaluate the <code>head</code> argument twice.</dl><dl compact><dt>
758 <b>Parameters: </b><dd>
759 <table border=0 cellspacing=2 cellpadding=0>
760 <tr><td valign=top><em>head</em>
762 A pointer to <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a>.
766 </dl><dl compact><dt>
768 A pointer to <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a>. </dl> </td>
771 <a name="a37" doxytag="dbprim.h.top::sh_object"></a><p>
772 <table width="100%" cellpadding="2" cellspacing="0" border="0">
775 <table cellpadding="0" cellspacing="0" border="0">
777 <td nowrap valign="top"><b>
780 <td valign="bottom"><b>
786 <table cellspacing=5 cellpadding=0 border=0>
796 This macro retrieves a pointer to the object referenced by the sparse matrix list head.<dl compact><dt>
797 <b>Parameters: </b><dd>
798 <table border=0 cellspacing=2 cellpadding=0>
799 <tr><td valign=top><em>head</em>
801 A pointer to <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a>.
805 </dl><dl compact><dt>
807 A pointer to <code>void</code>. </dl> </td>
810 <a name="a38" doxytag="dbprim.h.top::sh_size"></a><p>
811 <table width="100%" cellpadding="2" cellspacing="0" border="0">
814 <table cellpadding="0" cellspacing="0" border="0">
816 <td nowrap valign="top"><b>
819 <td valign="bottom"><b>
825 <table cellspacing=5 cellpadding=0 border=0>
835 This macro returns the physical size of the memory allocated by the library for this sparse matrix list.
839 The <a class="el" href="group__dbprim__smat.html#a28">st_size</a>() macro already counts the memory for each list in the table. Summing the results of <a class="el" href="group__dbprim__smat.html#a38">sh_size</a>() and <a class="el" href="group__dbprim__smat.html#a28">st_size</a>() will over-count the amount of memory actually in use.</dl><dl compact><dt>
840 <b>Parameters: </b><dd>
841 <table border=0 cellspacing=2 cellpadding=0>
842 <tr><td valign=top><em>head</em>
844 A pointer to <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a>.
848 </dl><dl compact><dt>
850 A <code>size_t</code>. </dl> </td>
853 <a name="a32" doxytag="dbprim.h.top::sh_table"></a><p>
854 <table width="100%" cellpadding="2" cellspacing="0" border="0">
857 <table cellpadding="0" cellspacing="0" border="0">
859 <td nowrap valign="top"><b>
862 <td valign="bottom"><b>
868 <table cellspacing=5 cellpadding=0 border=0>
878 If there are any elements in this sparse matrix list head, this macro will retrieve a pointer to the table in which they reside.<dl compact><dt>
879 <b>Parameters: </b><dd>
880 <table border=0 cellspacing=2 cellpadding=0>
881 <tr><td valign=top><em>head</em>
883 A pointer to <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a>.
887 </dl><dl compact><dt>
889 A pointer to <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>. </dl> </td>
892 <a name="a30" doxytag="dbprim.h.top::sh_verify"></a><p>
893 <table width="100%" cellpadding="2" cellspacing="0" border="0">
896 <table cellpadding="0" cellspacing="0" border="0">
898 <td nowrap valign="top"><b>
901 <td valign="bottom"><b>
907 <table cellspacing=5 cellpadding=0 border=0>
917 This macro verifies that a given pointer actually does point to a sparse matrix head.<dl compact><dt>
918 <b>Parameters: </b><dd>
919 <table border=0 cellspacing=2 cellpadding=0>
920 <tr><td valign=top><em>head</em>
922 A pointer to a <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a>.
926 </dl><dl compact><dt>
928 Boolean true if <code>head</code> is a valid sparse matrix head or false otherwise. </dl> </td>
931 <a name="a26" doxytag="dbprim.h.top::st_count"></a><p>
932 <table width="100%" cellpadding="2" cellspacing="0" border="0">
935 <table cellpadding="0" cellspacing="0" border="0">
937 <td nowrap valign="top"><b>
940 <td valign="bottom"><b>
946 <table cellspacing=5 cellpadding=0 border=0>
956 This macro retrieves the total number of items actually in the sparse matrix table.<dl compact><dt>
957 <b>Parameters: </b><dd>
958 <table border=0 cellspacing=2 cellpadding=0>
959 <tr><td valign=top><em>table</em>
961 A pointer to a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>.
965 </dl><dl compact><dt>
967 An <code>unsigned long</code> containing a count of the number of items in the sparse matrix table. </dl> </td>
970 <a name="a27" doxytag="dbprim.h.top::st_extra"></a><p>
971 <table width="100%" cellpadding="2" cellspacing="0" border="0">
974 <table cellpadding="0" cellspacing="0" border="0">
976 <td nowrap valign="top"><b>
979 <td valign="bottom"><b>
985 <table cellspacing=5 cellpadding=0 border=0>
995 This macro retrieves the extra pointer data associated with a particular sparse matrix table.<dl compact><dt>
996 <b>Parameters: </b><dd>
997 <table border=0 cellspacing=2 cellpadding=0>
998 <tr><td valign=top><em>table</em>
1000 A pointer to a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>.
1004 </dl><dl compact><dt>
1005 <b>Returns: </b><dd>
1006 A pointer to <code>void</code>. </dl> </td>
1009 <a name="a23" doxytag="dbprim.h.top::st_flags"></a><p>
1010 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1013 <table cellpadding="0" cellspacing="0" border="0">
1015 <td nowrap valign="top"><b>
1018 <td valign="bottom"><b>
1024 <table cellspacing=5 cellpadding=0 border=0>
1034 This macro retrieves the flags associated with the sparse matrix 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>
1035 <b>Parameters: </b><dd>
1036 <table border=0 cellspacing=2 cellpadding=0>
1037 <tr><td valign=top><em>table</em>
1039 A pointer to a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>.
1043 </dl><dl compact><dt>
1044 <b>Returns: </b><dd>
1045 An <code>unsigned long</code> containing the flags for the sparse matrix table. </dl> </td>
1048 <a name="a24" doxytag="dbprim.h.top::st_frozen"></a><p>
1049 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1052 <table cellpadding="0" cellspacing="0" border="0">
1054 <td nowrap valign="top"><b>
1057 <td valign="bottom"><b>
1063 <table cellspacing=5 cellpadding=0 border=0>
1073 This macro returns a non-zero value if the matrix is currently frozen. The sparse matrix may be frozen if there is an iteration in progress.<dl compact><dt>
1074 <b>Parameters: </b><dd>
1075 <table border=0 cellspacing=2 cellpadding=0>
1076 <tr><td valign=top><em>table</em>
1078 A pointer to a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>.
1082 </dl><dl compact><dt>
1083 <b>Returns: </b><dd>
1084 A zero value if the matrix is not frozen or a non-zero value if the matrix is frozen. </dl> </td>
1087 <a name="a25" doxytag="dbprim.h.top::st_modulus"></a><p>
1088 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1091 <table cellpadding="0" cellspacing="0" border="0">
1093 <td nowrap valign="top"><b>
1096 <td valign="bottom"><b>
1102 <table cellspacing=5 cellpadding=0 border=0>
1112 This macro retrieves the number of buckets allocated for the sparse matrix 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>
1113 <b>Parameters: </b><dd>
1114 <table border=0 cellspacing=2 cellpadding=0>
1115 <tr><td valign=top><em>table</em>
1117 A pointer to a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>.
1121 </dl><dl compact><dt>
1122 <b>Returns: </b><dd>
1123 An <code>unsigned long</code> containing the number of buckets allocated for the sparse matrix table. </dl> </td>
1126 <a name="a28" doxytag="dbprim.h.top::st_size"></a><p>
1127 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1130 <table cellpadding="0" cellspacing="0" border="0">
1132 <td nowrap valign="top"><b>
1135 <td valign="bottom"><b>
1141 <table cellspacing=5 cellpadding=0 border=0>
1151 This macro returns the physical size of the memory allocated by the library for this sparse matrix table.
1155 The <a class="el" href="group__dbprim__smat.html#a28">st_size</a>() macro already counts the memory for each list in the table. Summing the results of <a class="el" href="group__dbprim__smat.html#a38">sh_size</a>() and <a class="el" href="group__dbprim__smat.html#a28">st_size</a>() will over-count the amount of memory actually in use.</dl><dl compact><dt>
1156 <b>Parameters: </b><dd>
1157 <table border=0 cellspacing=2 cellpadding=0>
1158 <tr><td valign=top><em>table</em>
1160 A pointer to a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>.
1164 </dl><dl compact><dt>
1165 <b>Returns: </b><dd>
1166 A <code>size_t</code>. </dl> </td>
1169 <a name="a22" doxytag="dbprim.h.top::st_verify"></a><p>
1170 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1173 <table cellpadding="0" cellspacing="0" border="0">
1175 <td nowrap valign="top"><b>
1178 <td valign="bottom"><b>
1184 <table cellspacing=5 cellpadding=0 border=0>
1194 This macro verifies that a given pointer actually does point to a sparse matrix table.<dl compact><dt>
1195 <b>Parameters: </b><dd>
1196 <table border=0 cellspacing=2 cellpadding=0>
1197 <tr><td valign=top><em>table</em>
1199 A pointer to a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>.
1203 </dl><dl compact><dt>
1204 <b>Returns: </b><dd>
1205 Boolean true if <code>table</code> is a valid sparse matrix table or false otherwise. </dl> </td>
1208 <hr><h2>Typedef Documentation</h2>
1209 <a name="a5" doxytag="dbprim.h.top::smat_comp_t"></a><p>
1210 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1213 <table cellpadding="0" cellspacing="0" border="0">
1215 <td nowrap valign="top"><b>
1216 typedef unsigned long(* smat_comp_t)(<a class="el" href="group__dbprim__key.html#a0">db_key_t</a> *, <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> *)
1224 <table cellspacing=5 cellpadding=0 border=0>
1234 This function pointer references a callback used by <a class="el" href="group__dbprim__smat.html#a19">sh_find</a>(). It should return 0 if the sparse matrix entry represented by the second argument matches the key passed as the first argument. </td>
1237 <a name="a2" doxytag="dbprim.h.top::smat_entry_t"></a><p>
1238 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1241 <table cellpadding="0" cellspacing="0" border="0">
1243 <td nowrap valign="top"><b>
1244 typedef struct _smat_entry_s smat_entry_t
1252 <table cellspacing=5 cellpadding=0 border=0>
1262 This structure is allocated by the library and represents a single element in a sparse matrix. </td>
1265 <a name="a1" doxytag="dbprim.h.top::smat_head_t"></a><p>
1266 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1269 <table cellpadding="0" cellspacing="0" border="0">
1271 <td nowrap valign="top"><b>
1272 typedef struct _smat_head_s smat_head_t
1280 <table cellspacing=5 cellpadding=0 border=0>
1290 This structure is the head of a linked list of sparse matrix entries. </td>
1293 <a name="a4" doxytag="dbprim.h.top::smat_iter_t"></a><p>
1294 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1297 <table cellpadding="0" cellspacing="0" border="0">
1299 <td nowrap valign="top"><b>
1300 typedef unsigned long(* smat_iter_t)(<a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> *, <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> *, void *)
1308 <table cellspacing=5 cellpadding=0 border=0>
1318 This function pointer references a callback used by <a class="el" href="group__dbprim__smat.html#a13">st_iter</a>(), <a class="el" href="group__dbprim__smat.html#a14">st_flush</a>(), <a class="el" href="group__dbprim__smat.html#a20">sh_iter</a>(), and sh_flush(). It should return 0 for success. A non-zero return value will terminate the operation and will become the return value of the call. </td>
1321 <a name="a6" doxytag="dbprim.h.top::smat_loc_t"></a><p>
1322 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1325 <table cellpadding="0" cellspacing="0" border="0">
1327 <td nowrap valign="top"><b>
1328 typedef enum <a class="el" href="group__dbprim__smat.html#a48">_smat_loc_e</a> smat_loc_t
1336 <table cellspacing=5 cellpadding=0 border=0>
1346 See the documentation for the enumeration <a class="el" href="group__dbprim__smat.html#a48">_smat_loc_e</a>. </td>
1349 <a name="a3" doxytag="dbprim.h.top::smat_resize_t"></a><p>
1350 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1353 <table cellpadding="0" cellspacing="0" border="0">
1355 <td nowrap valign="top"><b>
1356 typedef unsigned long(* smat_resize_t)(<a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> *, unsigned long)
1364 <table cellspacing=5 cellpadding=0 border=0>
1374 This function pointer references a callback that will be called with both the old and new sparse matrix table sizes whenever a sparse matrix's hash table table is resized. It should return non-zero only when the resize should be inhibited. </td>
1377 <a name="a0" doxytag="dbprim.h.top::smat_table_t"></a><p>
1378 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1381 <table cellpadding="0" cellspacing="0" border="0">
1383 <td nowrap valign="top"><b>
1384 typedef struct _smat_table_s smat_table_t
1392 <table cellspacing=5 cellpadding=0 border=0>
1402 This structure is the basis of all sparse matrices maintained by this library. </td>
1405 <hr><h2>Enumeration Type Documentation</h2>
1406 <a name="a48" doxytag="dbprim.h.top::_smat_loc_e"></a><p>
1407 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1410 <table cellpadding="0" cellspacing="0" border="0">
1412 <td nowrap valign="top"><b>
1421 <table cellspacing=5 cellpadding=0 border=0>
1431 This enumeration is used to specify whether an element is a row or column element. It should be referenced by the typedef <a class="el" href="group__dbprim__smat.html#a6">smat_loc_t</a>. <dl compact><dt>
1432 <b>Enumeration values:</b><dd>
1433 <table border=0 cellspacing=2 cellpadding=0>
1434 <tr><td valign=top><a name="a48a102" doxytag="SMAT_LOC_FIRST"></a><em>SMAT_LOC_FIRST</em>
1436 First entry (``row''). </td></tr>
1437 <tr><td valign=top><a name="a48a103" doxytag="SMAT_LOC_SECOND"></a><em>SMAT_LOC_SECOND</em>
1439 Second entry (``column''). </td></tr>
1445 <hr><h2>Function Documentation</h2>
1446 <a name="a19" doxytag="sh_find.c::sh_find"></a><p>
1447 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1450 <table cellpadding="0" cellspacing="0" border="0">
1452 <td nowrap valign="top"><b>
1453 unsigned long sh_find (
1455 <td valign="bottom"><b>
1456 <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> * <em>head</em>,
1462 <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> ** <em>elem_p</em>,
1468 <a class="el" href="group__dbprim__smat.html#a5">smat_comp_t</a> <em>comp_func</em>,
1474 <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> * <em>start</em>,
1480 <a class="el" href="group__dbprim__key.html#a0">db_key_t</a> * <em>key</em> )
1488 <table cellspacing=5 cellpadding=0 border=0>
1498 This function iterates through the given row or column of a sparse matrix looking for an element that matches the given <code>key</code>.<dl compact><dt>
1499 <b>Parameters: </b><dd>
1500 <table border=0 cellspacing=2 cellpadding=0>
1501 <tr><td valign=top><em>head</em>
1503 A pointer to a <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a>. </td></tr>
1504 <tr><td valign=top><em>elem_p</em>
1506 A pointer to a pointer to a <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a>. This is a result pramater. <code>NULL</code> is an invalid value. </td></tr>
1507 <tr><td valign=top><em>comp_func</em>
1509 A pointer to a comparison function used to compare the key to a particular entry. See the documentation for <a class="el" href="group__dbprim__smat.html#a5">smat_comp_t</a> for more information. </td></tr>
1510 <tr><td valign=top><em>start</em>
1512 A pointer to a <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> describing where in the row or column to start. If <code>NULL</code> is passed, the beginning of the row or column will be assumed. </td></tr>
1513 <tr><td valign=top><em>key</em>
1515 A key to search for.</td></tr>
1517 </dl><dl compact><dt>
1518 <b>Return values: </b><dd>
1519 <table border=0 cellspacing=2 cellpadding=0>
1520 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1522 An argument was invalid. </td></tr>
1523 <tr><td valign=top><em>DB_ERR_WRONGTABLE</em>
1525 <code>start</code> is not in this row or column. </td></tr>
1526 <tr><td valign=top><em>DB_ERR_NOENTRY</em>
1528 No matching entry was found. </td></tr>
1533 <a name="a17" doxytag="sh_init.c::sh_init"></a><p>
1534 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1537 <table cellpadding="0" cellspacing="0" border="0">
1539 <td nowrap valign="top"><b>
1540 unsigned long sh_init (
1542 <td valign="bottom"><b>
1543 <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> * <em>head</em>,
1549 <a class="el" href="group__dbprim__smat.html#a6">smat_loc_t</a> <em>elem</em>,
1555 void * <em>object</em> )
1563 <table cellspacing=5 cellpadding=0 border=0>
1573 This function dynamically initializes a sparse matrix row or column linked list head. The <code>elem</code> argument specifies whether the object is to be associated with a <a class="el" href="group__dbprim__smat.html#a48a102">SMAT_LOC_FIRST</a> list or a <a class="el" href="group__dbprim__smat.html#a48a103">SMAT_LOC_SECOND</a> list.<dl compact><dt>
1574 <b>Parameters: </b><dd>
1575 <table border=0 cellspacing=2 cellpadding=0>
1576 <tr><td valign=top><em>head</em>
1578 A pointer to a <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> to be initialized. </td></tr>
1579 <tr><td valign=top><em>elem</em>
1581 Either <a class="el" href="group__dbprim__smat.html#a48a102">SMAT_LOC_FIRST</a> or <a class="el" href="group__dbprim__smat.html#a48a103">SMAT_LOC_SECOND</a>. </td></tr>
1582 <tr><td valign=top><em>object</em>
1584 A pointer to the object containing the sparse matrix row or column head.</td></tr>
1586 </dl><dl compact><dt>
1587 <b>Return values: </b><dd>
1588 <table border=0 cellspacing=2 cellpadding=0>
1589 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1591 An invalid argument was given. </td></tr>
1596 <a name="a20" doxytag="sh_iter.c::sh_iter"></a><p>
1597 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1600 <table cellpadding="0" cellspacing="0" border="0">
1602 <td nowrap valign="top"><b>
1603 unsigned long sh_iter (
1605 <td valign="bottom"><b>
1606 <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> * <em>head</em>,
1612 <a class="el" href="group__dbprim__smat.html#a4">smat_iter_t</a> <em>iter_func</em>,
1618 void * <em>extra</em> )
1626 <table cellspacing=5 cellpadding=0 border=0>
1636 This function iterates over a row or column of a sparse matrix, executing the given <code>iter_func</code> for each entry.<dl compact><dt>
1637 <b>Parameters: </b><dd>
1638 <table border=0 cellspacing=2 cellpadding=0>
1639 <tr><td valign=top><em>head</em>
1641 A pointer to a <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a>. </td></tr>
1642 <tr><td valign=top><em>iter_func</em>
1644 A pointer to a callback function used to perform user-specified actions on an entry in a row or column of a sparse matrix. <code>NULL</code> is an invalid value. See the documentation for <a class="el" href="group__dbprim__smat.html#a4">smat_iter_t</a> for more information. </td></tr>
1645 <tr><td valign=top><em>extra</em>
1647 A <code>void</code> pointer that will be passed to <code>iter_func</code>.</td></tr>
1649 </dl><dl compact><dt>
1650 <b>Return values: </b><dd>
1651 <table border=0 cellspacing=2 cellpadding=0>
1652 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1654 An argument was invalid. </td></tr>
1659 <a name="a18" doxytag="sh_move.c::sh_move"></a><p>
1660 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1663 <table cellpadding="0" cellspacing="0" border="0">
1665 <td nowrap valign="top"><b>
1666 unsigned long sh_move (
1668 <td valign="bottom"><b>
1669 <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> * <em>head</em>,
1675 <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> * <em>elem</em>,
1681 <a class="el" href="group__dbprim__link.html#a4">link_loc_t</a> <em>loc</em>,
1687 <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> * <em>elem2</em> )
1695 <table cellspacing=5 cellpadding=0 border=0>
1705 This function allows the specified entry to be shifted within the linked list describing the row or column. It is very similar to the <a class="el" href="group__dbprim__link.html#a7">ll_move</a>() function.<dl compact><dt>
1706 <b>Parameters: </b><dd>
1707 <table border=0 cellspacing=2 cellpadding=0>
1708 <tr><td valign=top><em>head</em>
1710 A pointer to a <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a>. </td></tr>
1711 <tr><td valign=top><em>elem</em>
1713 A pointer to the <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> describing the entry to be moved. </td></tr>
1714 <tr><td valign=top><em>loc</em>
1716 A <a class="el" href="group__dbprim__link.html#a4">link_loc_t</a> indicating where the entry should be moved to. </td></tr>
1717 <tr><td valign=top><em>elem2</em>
1719 A pointer to a <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> describing another entry 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>
1721 </dl><dl compact><dt>
1722 <b>Return values: </b><dd>
1723 <table border=0 cellspacing=2 cellpadding=0>
1724 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1726 An argument was invalid. </td></tr>
1727 <tr><td valign=top><em>DB_ERR_BUSY</em>
1729 <code>elem</code> and <code>elem2</code> are the same entry. </td></tr>
1730 <tr><td valign=top><em>DB_ERR_WRONGTABLE</em>
1732 <code>elem</code> or <code>elem2</code> are in a different row or column. </td></tr>
1733 <tr><td valign=top><em>DB_ERR_UNUSED</em>
1735 <code>elem</code> or <code>elem2</code> are not in any row or column. </td></tr>
1740 <a name="a7" doxytag="smat_freelist.c::smat_cleanup"></a><p>
1741 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1744 <table cellpadding="0" cellspacing="0" border="0">
1746 <td nowrap valign="top"><b>
1747 unsigned long smat_cleanup (
1749 <td valign="bottom"><b>
1758 <table cellspacing=5 cellpadding=0 border=0>
1768 This function frees all smat_entry_t objects on the internal free list. It is always successful and returns 0. </td>
1771 <a name="a8" doxytag="smat_freelist.c::smat_freemem"></a><p>
1772 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1775 <table cellpadding="0" cellspacing="0" border="0">
1777 <td nowrap valign="top"><b>
1778 unsigned long smat_freemem (
1780 <td valign="bottom"><b>
1789 <table cellspacing=5 cellpadding=0 border=0>
1799 This function returns the amount of memory being used by the internal free list of smat_entry_t objects.
1802 <b>Returns: </b><dd>
1803 A number indicating the size, in bytes, of the memory allocated for smat_entry_t objects on the free list. </dl> </td>
1806 <a name="a10" doxytag="st_add.c::st_add"></a><p>
1807 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1810 <table cellpadding="0" cellspacing="0" border="0">
1812 <td nowrap valign="top"><b>
1813 unsigned long st_add (
1815 <td valign="bottom"><b>
1816 <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> * <em>table</em>,
1822 <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> ** <em>entry_p</em>,
1828 <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> * <em>head1</em>,
1834 <a class="el" href="group__dbprim__link.html#a4">link_loc_t</a> <em>loc1</em>,
1840 <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> * <em>ent1</em>,
1846 <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> * <em>head2</em>,
1852 <a class="el" href="group__dbprim__link.html#a4">link_loc_t</a> <em>loc2</em>,
1858 <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> * <em>ent2</em> )
1866 <table cellspacing=5 cellpadding=0 border=0>
1876 This function adds an entry to a sparse matrix. The entry is referenced in three different places, thus the complex set of arguments. This function will allocate a <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> and return it through the <code>entry_p</code> result parameter.<dl compact><dt>
1877 <b>Parameters: </b><dd>
1878 <table border=0 cellspacing=2 cellpadding=0>
1879 <tr><td valign=top><em>table</em>
1881 A pointer to a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>. </td></tr>
1882 <tr><td valign=top><em>entry_p</em>
1884 A pointer to a pointer to a <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a>. This is a result parameter. If <code>NULL</code> is passed, the addition will be performed and an appropriate error code returned. </td></tr>
1885 <tr><td valign=top><em>head1</em>
1887 A pointer to a <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> representing a <a class="el" href="group__dbprim__smat.html#a48a102">SMAT_LOC_FIRST</a> sparse matrix list. </td></tr>
1888 <tr><td valign=top><em>loc1</em>
1890 A <a class="el" href="group__dbprim__link.html#a4">link_loc_t</a> indicating where the entry should be added for <code>head1</code>. </td></tr>
1891 <tr><td valign=top><em>ent1</em>
1893 A pointer to a <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> describing another element in the list represented by <code>head1</code> if <code>loc1</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>
1894 <tr><td valign=top><em>head2</em>
1896 A pointer to a <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> representing a <a class="el" href="group__dbprim__smat.html#a48a103">SMAT_LOC_SECOND</a> sparse matrix list. </td></tr>
1897 <tr><td valign=top><em>loc2</em>
1899 A <a class="el" href="group__dbprim__link.html#a4">link_loc_t</a> indicating where the entry should be added for <code>head2</code>. </td></tr>
1900 <tr><td valign=top><em>ent2</em>
1902 A pointer to a <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> describing another element in the list represented by <code>head2</code> if <code>loc2</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>
1904 </dl><dl compact><dt>
1905 <b>Return values: </b><dd>
1906 <table border=0 cellspacing=2 cellpadding=0>
1907 <tr><td valign=top><em>DB_ERR_BADARGS</em>
1909 An argument was invalid. </td></tr>
1910 <tr><td valign=top><em>DB_ERR_BUSY</em>
1912 One of the arguments is already in the table. </td></tr>
1913 <tr><td valign=top><em>DB_ERR_FROZEN</em>
1915 The table is currently frozen. </td></tr>
1916 <tr><td valign=top><em>DB_ERR_NOTABLE</em>
1918 The bucket table has not been allocated and automatic growth is not enabled. </td></tr>
1919 <tr><td valign=top><em>DB_ERR_WRONGTABLE</em>
1921 One of the arguments was not in the proper table or list. </td></tr>
1922 <tr><td valign=top><em>DB_ERR_UNUSED</em>
1924 One of the <code>ent</code> arguments is not presently in a list. </td></tr>
1925 <tr><td valign=top><em>DB_ERR_UNRECOVERABLE</em>
1927 An unrecoverable error occurred while resizing the table. </td></tr>
1928 <tr><td valign=top><em>ENOMEM</em>
1930 No memory could be allocated for the <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> structure. </td></tr>
1935 <a name="a12" doxytag="st_find.c::st_find"></a><p>
1936 <table width="100%" cellpadding="2" cellspacing="0" border="0">
1939 <table cellpadding="0" cellspacing="0" border="0">
1941 <td nowrap valign="top"><b>
1942 unsigned long st_find (
1944 <td valign="bottom"><b>
1945 <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> * <em>table</em>,
1951 <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> ** <em>entry_p</em>,
1957 <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> * <em>head1</em>,
1963 <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> * <em>head2</em> )
1971 <table cellspacing=5 cellpadding=0 border=0>
1981 This function looks up the entry matching the given <code>head1</code> and <code>head2</code>.<dl compact><dt>
1982 <b>Parameters: </b><dd>
1983 <table border=0 cellspacing=2 cellpadding=0>
1984 <tr><td valign=top><em>table</em>
1986 A pointer to a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>. </td></tr>
1987 <tr><td valign=top><em>entry_p</em>
1989 A pointer to a pointer to a <a class="el" href="group__dbprim__smat.html#a2">smat_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>
1990 <tr><td valign=top><em>head1</em>
1992 A pointer to a <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> initialized to <a class="el" href="group__dbprim__smat.html#a48a102">SMAT_LOC_FIRST</a>. </td></tr>
1993 <tr><td valign=top><em>head2</em>
1995 A pointer to a <a class="el" href="group__dbprim__smat.html#a1">smat_head_t</a> initialized to <a class="el" href="group__dbprim__smat.html#a48a103">SMAT_LOC_SECOND</a>.</td></tr>
1997 </dl><dl compact><dt>
1998 <b>Return values: </b><dd>
1999 <table border=0 cellspacing=2 cellpadding=0>
2000 <tr><td valign=top><em>DB_ERR_BADARGS</em>
2002 An argument was invalid. </td></tr>
2003 <tr><td valign=top><em>DB_ERR_WRONGTABLE</em>
2005 One or both of <code>head1</code> or <code>head2</code> are not referenced in this table. </td></tr>
2006 <tr><td valign=top><em>DB_ERR_NOENTRY</em>
2008 No matching entry was found. </td></tr>
2013 <a name="a14" doxytag="st_flush.c::st_flush"></a><p>
2014 <table width="100%" cellpadding="2" cellspacing="0" border="0">
2017 <table cellpadding="0" cellspacing="0" border="0">
2019 <td nowrap valign="top"><b>
2020 unsigned long st_flush (
2022 <td valign="bottom"><b>
2023 <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> * <em>table</em>,
2029 <a class="el" href="group__dbprim__smat.html#a4">smat_iter_t</a> <em>flush_func</em>,
2035 void * <em>extra</em> )
2043 <table cellspacing=5 cellpadding=0 border=0>
2053 This function flushes a sparse matrix--that is, it removes each entry from the matrix. 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>
2054 <b>Parameters: </b><dd>
2055 <table border=0 cellspacing=2 cellpadding=0>
2056 <tr><td valign=top><em>table</em>
2058 A pointer to a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>. </td></tr>
2059 <tr><td valign=top><em>flush_func</em>
2061 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__smat.html#a4">smat_iter_t</a> for more information. </td></tr>
2062 <tr><td valign=top><em>extra</em>
2064 A <code>void</code> pointer that will be passed to <code>iter_func</code>.</td></tr>
2066 </dl><dl compact><dt>
2067 <b>Return values: </b><dd>
2068 <table border=0 cellspacing=2 cellpadding=0>
2069 <tr><td valign=top><em>DB_ERR_BADARGS</em>
2071 An argument was invalid. </td></tr>
2072 <tr><td valign=top><em>DB_ERR_FROZEN</em>
2074 The sparse matrix is frozen. </td></tr>
2079 <a name="a16" doxytag="st_free.c::st_free"></a><p>
2080 <table width="100%" cellpadding="2" cellspacing="0" border="0">
2083 <table cellpadding="0" cellspacing="0" border="0">
2085 <td nowrap valign="top"><b>
2086 unsigned long st_free (
2088 <td valign="bottom"><b>
2089 <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> * <em>table</em> )
2097 <table cellspacing=5 cellpadding=0 border=0>
2107 This function releases the memory used by the bucket table of the empty hash table associated with a sparse matrix.<dl compact><dt>
2108 <b>Parameters: </b><dd>
2109 <table border=0 cellspacing=2 cellpadding=0>
2110 <tr><td valign=top><em>table</em>
2112 A pointer to a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>.</td></tr>
2114 </dl><dl compact><dt>
2115 <b>Return values: </b><dd>
2116 <table border=0 cellspacing=2 cellpadding=0>
2117 <tr><td valign=top><em>DB_ERR_BADARGS</em>
2119 An invalid argument was given. </td></tr>
2120 <tr><td valign=top><em>DB_ERR_FROZEN</em>
2122 The table is frozen. </td></tr>
2123 <tr><td valign=top><em>DB_ERR_NOTEMPTY</em>
2125 The table is not empty. </td></tr>
2130 <a name="a9" doxytag="st_init.c::st_init"></a><p>
2131 <table width="100%" cellpadding="2" cellspacing="0" border="0">
2134 <table cellpadding="0" cellspacing="0" border="0">
2136 <td nowrap valign="top"><b>
2137 unsigned long st_init (
2139 <td valign="bottom"><b>
2140 <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> * <em>table</em>,
2146 unsigned long <em>flags</em>,
2152 <a class="el" href="group__dbprim__smat.html#a3">smat_resize_t</a> <em>resize</em>,
2158 void * <em>extra</em>,
2164 unsigned long <em>init_mod</em> )
2172 <table cellspacing=5 cellpadding=0 border=0>
2180 This function dynamically initializes a sparse matrix table.<dl compact><dt>
2181 <b>Parameters: </b><dd>
2182 <table border=0 cellspacing=2 cellpadding=0>
2183 <tr><td valign=top><em>table</em>
2185 A pointer to a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> to be initialized. </td></tr>
2186 <tr><td valign=top><em>flags</em>
2188 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>
2189 <tr><td valign=top><em>resize</em>
2191 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>
2192 <tr><td valign=top><em>extra</em>
2194 Extra pointer data that should be associated with the sparse matrix table. </td></tr>
2195 <tr><td valign=top><em>init_mod</em>
2197 An initial modulus for the table. This will presumably be extracted by <a class="el" href="group__dbprim__smat.html#a25">st_modulus</a>() in a previous invocation of the application. A 0 value is valid.</td></tr>
2199 </dl><dl compact><dt>
2200 <b>Return values: </b><dd>
2201 <table border=0 cellspacing=2 cellpadding=0>
2202 <tr><td valign=top><em>DB_ERR_BADARGS</em>
2204 An invalid argument was given. </td></tr>
2205 <tr><td valign=top><em>ENOMEM</em>
2207 Unable to allocate memory. </td></tr>
2212 <a name="a13" doxytag="st_iter.c::st_iter"></a><p>
2213 <table width="100%" cellpadding="2" cellspacing="0" border="0">
2216 <table cellpadding="0" cellspacing="0" border="0">
2218 <td nowrap valign="top"><b>
2219 unsigned long st_iter (
2221 <td valign="bottom"><b>
2222 <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> * <em>table</em>,
2228 <a class="el" href="group__dbprim__smat.html#a4">smat_iter_t</a> <em>iter_func</em>,
2234 void * <em>extra</em> )
2242 <table cellspacing=5 cellpadding=0 border=0>
2252 This function iterates over every entry in a sparse matrix (in an unspecified order), executing the given <code>iter_func</code> on each entry.<dl compact><dt>
2253 <b>Parameters: </b><dd>
2254 <table border=0 cellspacing=2 cellpadding=0>
2255 <tr><td valign=top><em>table</em>
2257 A pointer to a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>. </td></tr>
2258 <tr><td valign=top><em>iter_func</em>
2260 A pointer to a callback function used to perform user-specified actions on an entry in a sparse matrix. <code>NULL</code> is an invalid value. See the documentation for <a class="el" href="group__dbprim__smat.html#a4">smat_iter_t</a> for more information. </td></tr>
2261 <tr><td valign=top><em>extra</em>
2263 A <code>void</code> pointer that will be passed to <code>iter_func</code>.</td></tr>
2265 </dl><dl compact><dt>
2266 <b>Return values: </b><dd>
2267 <table border=0 cellspacing=2 cellpadding=0>
2268 <tr><td valign=top><em>DB_ERR_BADARGS</em>
2270 An argument was invalid. </td></tr>
2271 <tr><td valign=top><em>DB_ERR_FROZEN</em>
2273 The sparse matrix is frozen. </td></tr>
2278 <a name="a11" doxytag="st_remove.c::st_remove"></a><p>
2279 <table width="100%" cellpadding="2" cellspacing="0" border="0">
2282 <table cellpadding="0" cellspacing="0" border="0">
2284 <td nowrap valign="top"><b>
2285 unsigned long st_remove (
2287 <td valign="bottom"><b>
2288 <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> * <em>table</em>,
2294 <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> * <em>entry</em> )
2302 <table cellspacing=5 cellpadding=0 border=0>
2312 This function removes the given entry from the specified sparse matrix.<dl compact><dt>
2313 <b>Parameters: </b><dd>
2314 <table border=0 cellspacing=2 cellpadding=0>
2315 <tr><td valign=top><em>table</em>
2317 A pointer to a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>. </td></tr>
2318 <tr><td valign=top><em>entry</em>
2320 A pointer to a <a class="el" href="group__dbprim__smat.html#a2">smat_entry_t</a> to be removed from the table.</td></tr>
2322 </dl><dl compact><dt>
2323 <b>Return values: </b><dd>
2324 <table border=0 cellspacing=2 cellpadding=0>
2325 <tr><td valign=top><em>DB_ERR_BADARGS</em>
2327 An invalid argument was given. </td></tr>
2328 <tr><td valign=top><em>DB_ERR_WRONGTABLE</em>
2330 Entry is not in this sparse matrix. </td></tr>
2331 <tr><td valign=top><em>DB_ERR_UNRECOVERABLE</em>
2333 An unrecoverable error occurred while removing the entry from the table. </td></tr>
2338 <a name="a15" doxytag="st_resize.c::st_resize"></a><p>
2339 <table width="100%" cellpadding="2" cellspacing="0" border="0">
2342 <table cellpadding="0" cellspacing="0" border="0">
2344 <td nowrap valign="top"><b>
2345 unsigned long st_resize (
2347 <td valign="bottom"><b>
2348 <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a> * <em>table</em>,
2354 unsigned long <em>new_size</em> )
2362 <table cellspacing=5 cellpadding=0 border=0>
2372 This function resizes the hash table associated with a sparse matrix based on the <code>new_size</code> parameter. See the documentation for <a class="el" href="group__dbprim__hash.html#a13">ht_resize</a>() for more information.<dl compact><dt>
2373 <b>Parameters: </b><dd>
2374 <table border=0 cellspacing=2 cellpadding=0>
2375 <tr><td valign=top><em>table</em>
2377 A pointer to a <a class="el" href="group__dbprim__smat.html#a0">smat_table_t</a>. </td></tr>
2378 <tr><td valign=top><em>new_size</em>
2380 A new size value for the table.</td></tr>
2382 </dl><dl compact><dt>
2383 <b>Return values: </b><dd>
2384 <table border=0 cellspacing=2 cellpadding=0>
2385 <tr><td valign=top><em>DB_ERR_BADARGS</em>
2387 An argument was invalid. </td></tr>
2388 <tr><td valign=top><em>DB_ERR_FROZEN</em>
2390 The table is currently frozen. </td></tr>
2391 <tr><td valign=top><em>DB_ERR_UNRECOVERABLE</em>
2393 A catastrophic error was encountered. The table is now unusable. </td></tr>
2394 <tr><td valign=top><em>ENOMEM</em>
2396 No memory could be allocated for the new bucket table. </td></tr>
2401 <hr><address><small>Generated at Thu Mar 6 21:23:10 2003 for dbprim by
2402 <a href="http://www.doxygen.org/index.html">
2403 <img src="doxygen.gif" alt="doxygen" align="middle" border=0
2404 width=110 height=53></a>1.2.8.1 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
2405 © 1997-2001</small></address>