1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3.1"/>
<title>Open SCAP Library: rbt_common.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">Open SCAP Library
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3.1 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="pages.html"><span>Related Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_dec16e0beb5f79ab6b40e328203e2e32.html">OVAL</a></li><li class="navelem"><a class="el" href="dir_d57a52ee0ad0cdc1d71df7a41be84a06.html">probes</a></li><li class="navelem"><a class="el" href="dir_e44ea870b871257418c4b8816dbb35e8.html">SEAP</a></li><li class="navelem"><a class="el" href="dir_3bbee5d1fd00ea842e36d8d254e96971.html">generic</a></li><li class="navelem"><a class="el" href="dir_603df96115490f2f1b2e522fd3121cff.html">rbt</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">rbt_common.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright 2010 Red Hat Inc., Durham, North Carolina.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * All Rights Reserved.</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * Authors:</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * "Daniel Kopecek" <dkopecek@redhat.com></span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#ifndef RBT_COMMON_H</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"></span><span class="preprocessor">#define RBT_COMMON_H</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"></span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"></span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <stdint.h></span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <stdbool.h></span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#if defined(RBT_IMPLICIT_LOCKING)</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"></span><span class="preprocessor"># include <pthread.h></span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"></span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#ifndef HAVE_POSIX_MEMALIGN</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"></span><span class="preprocessor"># ifdef HAVE_MEMALIGN</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"></span><span class="keywordtype">int</span> posix_memalign(<span class="keywordtype">void</span> **memptr, <span class="keywordtype">size_t</span> alignment, <span class="keywordtype">size_t</span> size);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor"># endif </span><span class="comment">/* HAVE_MEMALIGN */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* HAVE_POSIX_MEMALIGN */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor"></span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  RBT_GENKEY,</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  RBT_STRKEY,</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  RBT_I32KEY,</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  RBT_I64KEY</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> } rbt_type_t;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  RBT_WALK_PREORDER = 0x01,</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  RBT_WALK_INORDER = 0x02,</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  RBT_WALK_POSTORDER = 0x03,</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  RBT_WALK_LEVELORDER = 0x04,</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  RBT_WALK_RAWNODE = 0x10</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> } rbt_walk_t;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#define RBT_WALK_TYPEMASK 0x0f</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor"></span><span class="preprocessor">#define RBT_WALK_FLAGMASK 0xf0</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor"></span></div>
<div class="line"><a name="l00064"></a><span class="lineno"><a class="code" href="structrbt__node.html"> 64</a></span> <span class="keyword">struct </span><a class="code" href="structrbt__node.html" title="Generic node structure Lowest bit of _chld[0] holds the color bit.">rbt_node</a> {</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">struct </span><a class="code" href="structrbt__node.html" title="Generic node structure Lowest bit of _chld[0] holds the color bit.">rbt_node</a> *_chld[2];</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  uint8_t _node[];</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> };</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor">#define RBT_NODE_CB 0</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"></span><span class="preprocessor">#define RBT_NODE_CR 1</span></div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor"></span><span class="preprocessor">#define RBT_NODE_SL 0</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor"></span><span class="preprocessor">#define RBT_NODE_SR 1</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"></span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <a class="code" href="struct____attribute____.html">__attribute__</a>((pure)) static inline struct <a class="code" href="structrbt__node.html" title="Generic node structure Lowest bit of _chld[0] holds the color bit.">rbt_node</a> *rbt_node_ptr(const struct <a class="code" href="structrbt__node.html" title="Generic node structure Lowest bit of _chld[0] holds the color bit.">rbt_node</a> *nodep)</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> {</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">register</span> uintptr_t nodep_uint = (uintptr_t)(nodep);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  nodep_uint &= UINTPTR_MAX << 1;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">return</span> (<span class="keyword">struct</span> <a class="code" href="structrbt__node.html" title="Generic node structure Lowest bit of _chld[0] holds the color bit.">rbt_node</a> *)(nodep_uint);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor">#define rbt_node_setptr(dst,src) (dst) = (struct rbt_node *)((uintptr_t)rbt_node_ptr(src)|((uintptr_t)(dst)&1))</span></div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor"></span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor">#define rbt_node_setcolor(np, cb) \</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="preprocessor"> do { \</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor"> register struct rbt_node *__n = rbt_node_ptr(np); \</span></div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="preprocessor"> register uint8_t __c = (cb) & 1; \</span></div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor"> \</span></div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor"> if (__n != NULL) { \</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor"> if (__c) __n->_chld[0] = (struct rbt_node *)((uintptr_t)(__n->_chld[0]) | 1); \</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor"> else __n->_chld[0] = rbt_node_ptr(__n->_chld[0]); \</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor"> } \</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor"> } while(0)</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="preprocessor"></span><span class="preprocessor">#define rbt_node_getcolor_raw(cp) ((uintptr_t)(cp) & 1)</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="preprocessor"></span><span class="preprocessor">#define rbt_node_getcolor(np) (rbt_node_ptr(np) == NULL ? RBT_NODE_CB : rbt_node_getcolor_raw(rbt_node_ptr(np)->_chld[0]))</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor"></span><span class="preprocessor">#define rbt_node_cpycolor(dn, sn) rbt_node_setcolor((dn), rbt_node_getcolor(sn))</span></div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="preprocessor"></span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor">#define rbt_hpush4(__a, __p) \</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor"> do { \</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="preprocessor"> __a[3] = __a[2]; \</span></div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor"> __a[2] = __a[1]; \</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor"> __a[1] = __a[0]; \</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="preprocessor"> __a[0] = __p; \</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor"> } while(0)</span></div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor"></span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor">#define rbt_hpush3(__a, __p) \</span></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor"> do { \</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="preprocessor"> __a[2] = __a[1]; \</span></div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="preprocessor"> __a[1] = __a[0]; \</span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="preprocessor"> __a[0] = __p; \</span></div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="preprocessor"> } while(0)</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="preprocessor"></span></div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="preprocessor">#define rbt_redfix(__h, __d, v) \</span></div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="preprocessor"> do { \</span></div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="preprocessor"> if (((__d) & 3) < 2) { \</span></div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="preprocessor"> if (((__d) & 3) == 0) { \</span></div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="preprocessor"> rbt_node_setptr(v, rbt_node_rotate_R(__h[2])); \</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="preprocessor"> } else { \</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="preprocessor"> rbt_node_setptr(v, rbt_node_rotate_RL(__h[2])); \</span></div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor"> } \</span></div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="preprocessor"> } else { \</span></div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="preprocessor"> if (((__d) & 3) == 2) { \</span></div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="preprocessor"> rbt_node_setptr(v, rbt_node_rotate_LR(__h[2])); \</span></div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="preprocessor"> } else { \</span></div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="preprocessor"> rbt_node_setptr(v, rbt_node_rotate_L(__h[2])); \</span></div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="preprocessor"> } \</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="preprocessor"> } \</span></div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="preprocessor"> } while(0)</span></div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="preprocessor"></span></div>
<div class="line"><a name="l00129"></a><span class="lineno"><a class="code" href="structrbt.html"> 129</a></span> <span class="keyword">struct </span><a class="code" href="structrbt.html">rbt</a> {</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keyword">struct </span><a class="code" href="structrbt__node.html" title="Generic node structure Lowest bit of _chld[0] holds the color bit.">rbt_node</a> *root;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordtype">size_t</span> size;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  rbt_type_t type;</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="preprocessor">#if defined(RBT_IMPLICIT_LOCKING)</span></div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="preprocessor"></span> pthread_rwlock_t lock;</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="preprocessor"></span>};</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structrbt.html">rbt</a> <a class="code" href="structrbt.html">rbt_t</a>;</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <a class="code" href="structrbt.html">rbt_t</a> *rbt_new(rbt_type_t type);</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordtype">void</span> rbt_free(<a class="code" href="structrbt.html">rbt_t</a> *<a class="code" href="structrbt.html">rbt</a>, <span class="keywordtype">void</span> (*callback)(<span class="keywordtype">void</span> *));</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordtype">void</span> rbt_free2(<a class="code" href="structrbt.html">rbt_t</a> *rbt, <span class="keywordtype">void</span> (*callback)(<span class="keywordtype">void</span> *, <span class="keywordtype">void</span> *), <span class="keywordtype">void</span> *user);</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordtype">int</span> rbt_rlock(<a class="code" href="structrbt.html">rbt_t</a> *rbt);</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordtype">void</span> rbt_runlock(<a class="code" href="structrbt.html">rbt_t</a> *rbt);</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordtype">int</span> rbt_wlock(<a class="code" href="structrbt.html">rbt_t</a> *rbt);</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordtype">void</span> rbt_wunlock(<a class="code" href="structrbt.html">rbt_t</a> *rbt);</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keyword">struct </span><a class="code" href="structrbt__node.html" title="Generic node structure Lowest bit of _chld[0] holds the color bit.">rbt_node</a> *rbt_node_rotate_L(<span class="keyword">struct</span> <a class="code" href="structrbt__node.html" title="Generic node structure Lowest bit of _chld[0] holds the color bit.">rbt_node</a> *);</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">struct </span><a class="code" href="structrbt__node.html" title="Generic node structure Lowest bit of _chld[0] holds the color bit.">rbt_node</a> *rbt_node_rotate_R(<span class="keyword">struct</span> <a class="code" href="structrbt__node.html" title="Generic node structure Lowest bit of _chld[0] holds the color bit.">rbt_node</a> *);</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keyword">struct </span><a class="code" href="structrbt__node.html" title="Generic node structure Lowest bit of _chld[0] holds the color bit.">rbt_node</a> *rbt_node_rotate_LR(<span class="keyword">struct</span> <a class="code" href="structrbt__node.html" title="Generic node structure Lowest bit of _chld[0] holds the color bit.">rbt_node</a> *);</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keyword">struct </span><a class="code" href="structrbt__node.html" title="Generic node structure Lowest bit of _chld[0] holds the color bit.">rbt_node</a> *rbt_node_rotate_RL(<span class="keyword">struct</span> <a class="code" href="structrbt__node.html" title="Generic node structure Lowest bit of _chld[0] holds the color bit.">rbt_node</a> *);</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordtype">size_t</span> rbt_size(<a class="code" href="structrbt.html">rbt_t</a> *rbt);</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="preprocessor">#define rbt_walk_push(n) stack[depth++] = (n)</span></div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="preprocessor"></span><span class="preprocessor">#define rbt_walk_pop() stack[--depth]</span></div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="preprocessor"></span><span class="preprocessor">#define rbt_walk_top() stack[depth-1]</span></div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor"></span></div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordtype">int</span> rbt_walk_preorder(<a class="code" href="structrbt.html">rbt_t</a> *rbt, <span class="keywordtype">int</span> (*callback)(<span class="keywordtype">void</span> *), rbt_walk_t flags);</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordtype">int</span> rbt_walk_inorder(<a class="code" href="structrbt.html">rbt_t</a> *rbt, <span class="keywordtype">int</span> (*callback)(<span class="keywordtype">void</span> *), rbt_walk_t flags);</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordtype">int</span> rbt_walk_inorder2(<a class="code" href="structrbt.html">rbt_t</a> *rbt, <span class="keywordtype">int</span> (*callback)(<span class="keywordtype">void</span> *, <span class="keywordtype">void</span> *), <span class="keywordtype">void</span> *user, rbt_walk_t flags);</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordtype">int</span> rbt_walk_postorder(<a class="code" href="structrbt.html">rbt_t</a> *rbt, <span class="keywordtype">int</span> (*callback)(<span class="keywordtype">void</span> *), rbt_walk_t flags);</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="preprocessor">#endif </span><span class="comment">/* RBT_COMMON_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by  <a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.3.1
</small></address>
</body>
</html>
|