UNIXworkcode

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 5 <meta http-equiv="X-UA-Compatible" content="IE=9"/> 6 <meta name="generator" content="Doxygen 1.8.13"/> 7 <meta name="viewport" content="width=device-width, initial-scale=1"/> 8 <title>ucx: /home/mike/workspace/c/ucx/src/ucx/stack.h File Reference</title> 9 <link href="tabs.css" rel="stylesheet" type="text/css"/> 10 <script type="text/javascript" src="jquery.js"></script> 11 <script type="text/javascript" src="dynsections.js"></script> 12 <link href="search/search.css" rel="stylesheet" type="text/css"/> 13 <script type="text/javascript" src="search/searchdata.js"></script> 14 <script type="text/javascript" src="search/search.js"></script> 15 <link href="doxygen.css" rel="stylesheet" type="text/css" /> 16 </head> 17 <body> 18 <div id="top"><!-- do not remove this div, it is closed by doxygen! --> 19 <div id="titlearea"> 20 <table cellspacing="0" cellpadding="0"> 21 <tbody> 22 <tr style="height: 56px;"> 23 <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 24 <td id="projectalign" style="padding-left: 0.5em;"> 25 <div id="projectname">ucx 26 </div> 27 <div id="projectbrief">UAP Common Extensions</div> 28 </td> 29 </tr> 30 </tbody> 31 </table> 32 </div> 33 <!-- end header part --> 34 <!-- Generated by Doxygen 1.8.13 --> 35 <script type="text/javascript"> 36 var searchBox = new SearchBox("searchBox", "search",false,'Search'); 37 </script> 38 <script type="text/javascript" src="menudata.js"></script> 39 <script type="text/javascript" src="menu.js"></script> 40 <script type="text/javascript"> 41 $(function() { 42 initMenu('',true,false,'search.php','Search'); 43 $(document).ready(function() { init_search(); }); 44 }); 45 </script> 46 <div id="main-nav"></div> 47 <!-- window showing the filter options --> 48 <div id="MSearchSelectWindow" 49 onmouseover="return searchBox.OnSearchSelectShow()" 50 onmouseout="return searchBox.OnSearchSelectHide()" 51 onkeydown="return searchBox.OnSearchSelectKey(event)"> 52 </div> 53 54 <!-- iframe showing the search results (closed by default) --> 55 <div id="MSearchResultsWindow"> 56 <iframe src="javascript:void(0)" frameborder="0" 57 name="MSearchResults" id="MSearchResults"> 58 </iframe> 59 </div> 60 61 <div id="nav-path" class="navpath"> 62 <ul> 63 <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 64 </div> 65 </div><!-- top --> 66 <div class="header"> 67 <div class="summary"> 68 <a href="#nested-classes">Data Structures</a> &#124; 69 <a href="#define-members">Macros</a> &#124; 70 <a href="#func-members">Functions</a> </div> 71 <div class="headertitle"> 72 <div class="title">stack.h File Reference</div> </div> 73 </div><!--header--> 74 <div class="contents"> 75 76 <p>Default stack memory allocation implementation. 77 <a href="#details">More...</a></p> 78 <div class="textblock"><code>#include &quot;<a class="el" href="ucx_8h_source.html">ucx.h</a>&quot;</code><br /> 79 <code>#include &quot;<a class="el" href="allocator_8h_source.html">allocator.h</a>&quot;</code><br /> 80 </div> 81 <p><a href="stack_8h_source.html">Go to the source code of this file.</a></p> 82 <table class="memberdecls"> 83 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> 84 Data Structures</h2></td></tr> 85 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxStack.html">UcxStack</a></td></tr> 86 <tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">UCX stack structure. <a href="structUcxStack.html#details">More...</a><br /></td></tr> 87 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> 88 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structucx__stack__metadata.html">ucx_stack_metadata</a></td></tr> 89 <tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Metadata for each UCX stack element. <a href="structucx__stack__metadata.html#details">More...</a><br /></td></tr> 90 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> 91 </table><table class="memberdecls"> 92 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> 93 Macros</h2></td></tr> 94 <tr class="memitem:a030197051a803e87d5eeac5adb80b15a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#a030197051a803e87d5eeac5adb80b15a">ucx_stack_topsize</a>(stack)</td></tr> 95 <tr class="memdesc:a030197051a803e87d5eeac5adb80b15a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the size of the top most element. <a href="#a030197051a803e87d5eeac5adb80b15a">More...</a><br /></td></tr> 96 <tr class="separator:a030197051a803e87d5eeac5adb80b15a"><td class="memSeparator" colspan="2">&#160;</td></tr> 97 <tr class="memitem:a506b82374734ec476d086ddfb561174d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#a506b82374734ec476d086ddfb561174d">ucx_stack_pop</a>(stack, dest)&#160;&#160;&#160;<a class="el" href="stack_8h.html#a07ea48f28eab474dcfefbb86fa66ef81">ucx_stack_popn</a>(stack, dest, (size_t)-1)</td></tr> 98 <tr class="memdesc:a506b82374734ec476d086ddfb561174d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes the top most element from the stack and copies the content to <code> dest</code>, if specified. <a href="#a506b82374734ec476d086ddfb561174d">More...</a><br /></td></tr> 99 <tr class="separator:a506b82374734ec476d086ddfb561174d"><td class="memSeparator" colspan="2">&#160;</td></tr> 100 <tr class="memitem:a4f7239dbd6c032c56812e370b71c1985"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#a4f7239dbd6c032c56812e370b71c1985">ucx_stack_empty</a>(stack)&#160;&#160;&#160;(!(stack)-&gt;top)</td></tr> 101 <tr class="memdesc:a4f7239dbd6c032c56812e370b71c1985"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks, if the stack is empty. <a href="#a4f7239dbd6c032c56812e370b71c1985">More...</a><br /></td></tr> 102 <tr class="separator:a4f7239dbd6c032c56812e370b71c1985"><td class="memSeparator" colspan="2">&#160;</td></tr> 103 <tr class="memitem:a3b761343c6491222604341ebfa443226"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#a3b761343c6491222604341ebfa443226">ucx_stack_dim</a>(size, elems)</td></tr> 104 <tr class="memdesc:a3b761343c6491222604341ebfa443226"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes a recommended size for the stack memory area. <a href="#a3b761343c6491222604341ebfa443226">More...</a><br /></td></tr> 105 <tr class="separator:a3b761343c6491222604341ebfa443226"><td class="memSeparator" colspan="2">&#160;</td></tr> 106 </table><table class="memberdecls"> 107 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> 108 Functions</h2></td></tr> 109 <tr class="memitem:abaef685df4e7ef95cd7218984a0618fe"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#abaef685df4e7ef95cd7218984a0618fe">ucx_stack_init</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack, char *space, size_t size)</td></tr> 110 <tr class="memdesc:abaef685df4e7ef95cd7218984a0618fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes <a class="el" href="structUcxStack.html" title="UCX stack structure. ">UcxStack</a> structure with memory. <a href="#abaef685df4e7ef95cd7218984a0618fe">More...</a><br /></td></tr> 111 <tr class="separator:abaef685df4e7ef95cd7218984a0618fe"><td class="memSeparator" colspan="2">&#160;</td></tr> 112 <tr class="memitem:af865b416802140f6b6e8ab3626d7d1ac"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#af865b416802140f6b6e8ab3626d7d1ac">ucx_stack_malloc</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack, size_t n)</td></tr> 113 <tr class="memdesc:af865b416802140f6b6e8ab3626d7d1ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates stack memory. <a href="#af865b416802140f6b6e8ab3626d7d1ac">More...</a><br /></td></tr> 114 <tr class="separator:af865b416802140f6b6e8ab3626d7d1ac"><td class="memSeparator" colspan="2">&#160;</td></tr> 115 <tr class="memitem:af85e6f77a8341beb6188f9ae1a8e9f92"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#af85e6f77a8341beb6188f9ae1a8e9f92">ucx_stack_push</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack, size_t n, const void *data)</td></tr> 116 <tr class="memdesc:af85e6f77a8341beb6188f9ae1a8e9f92"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates memory with <a class="el" href="stack_8h.html#af865b416802140f6b6e8ab3626d7d1ac" title="Allocates stack memory. ">ucx_stack_malloc()</a> and copies the specified data if the allocation was successful. <a href="#af85e6f77a8341beb6188f9ae1a8e9f92">More...</a><br /></td></tr> 117 <tr class="separator:af85e6f77a8341beb6188f9ae1a8e9f92"><td class="memSeparator" colspan="2">&#160;</td></tr> 118 <tr class="memitem:afdc467524b5e19a9a777c6bc03e17174"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#afdc467524b5e19a9a777c6bc03e17174">ucx_stack_calloc</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack, size_t nelem, size_t elsize)</td></tr> 119 <tr class="memdesc:afdc467524b5e19a9a777c6bc03e17174"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates an array of stack memory. <a href="#afdc467524b5e19a9a777c6bc03e17174">More...</a><br /></td></tr> 120 <tr class="separator:afdc467524b5e19a9a777c6bc03e17174"><td class="memSeparator" colspan="2">&#160;</td></tr> 121 <tr class="memitem:a7bb138979191bba138e76ea37488fae2"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#a7bb138979191bba138e76ea37488fae2">ucx_stack_pusharr</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack, size_t nelem, size_t elsize, const void *data)</td></tr> 122 <tr class="memdesc:a7bb138979191bba138e76ea37488fae2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates memory with <a class="el" href="stack_8h.html#afdc467524b5e19a9a777c6bc03e17174" title="Allocates an array of stack memory. ">ucx_stack_calloc()</a> and copies the specified data if the allocation was successful. <a href="#a7bb138979191bba138e76ea37488fae2">More...</a><br /></td></tr> 123 <tr class="separator:a7bb138979191bba138e76ea37488fae2"><td class="memSeparator" colspan="2">&#160;</td></tr> 124 <tr class="memitem:a0c678f96f6fabab49b2b034a1fe91c3a"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#a0c678f96f6fabab49b2b034a1fe91c3a">ucx_stack_realloc</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack, void *ptr, size_t n)</td></tr> 125 <tr class="memdesc:a0c678f96f6fabab49b2b034a1fe91c3a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reallocates memory on the stack. <a href="#a0c678f96f6fabab49b2b034a1fe91c3a">More...</a><br /></td></tr> 126 <tr class="separator:a0c678f96f6fabab49b2b034a1fe91c3a"><td class="memSeparator" colspan="2">&#160;</td></tr> 127 <tr class="memitem:aabd55c14a3866b3782ba324f4d8b4c41"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#aabd55c14a3866b3782ba324f4d8b4c41">ucx_stack_free</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack, void *ptr)</td></tr> 128 <tr class="memdesc:aabd55c14a3866b3782ba324f4d8b4c41"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees memory on the stack. <a href="#aabd55c14a3866b3782ba324f4d8b4c41">More...</a><br /></td></tr> 129 <tr class="separator:aabd55c14a3866b3782ba324f4d8b4c41"><td class="memSeparator" colspan="2">&#160;</td></tr> 130 <tr class="memitem:a07ea48f28eab474dcfefbb86fa66ef81"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#a07ea48f28eab474dcfefbb86fa66ef81">ucx_stack_popn</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack, void *dest, size_t n)</td></tr> 131 <tr class="memdesc:a07ea48f28eab474dcfefbb86fa66ef81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes the top most element from the stack and copies the content to <code> dest</code>. <a href="#a07ea48f28eab474dcfefbb86fa66ef81">More...</a><br /></td></tr> 132 <tr class="separator:a07ea48f28eab474dcfefbb86fa66ef81"><td class="memSeparator" colspan="2">&#160;</td></tr> 133 <tr class="memitem:a53cd2c7743dc8ad9cbd35ade0b4873e7"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#a53cd2c7743dc8ad9cbd35ade0b4873e7">ucx_stack_avail</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack)</td></tr> 134 <tr class="memdesc:a53cd2c7743dc8ad9cbd35ade0b4873e7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the remaining available memory on the specified stack. <a href="#a53cd2c7743dc8ad9cbd35ade0b4873e7">More...</a><br /></td></tr> 135 <tr class="separator:a53cd2c7743dc8ad9cbd35ade0b4873e7"><td class="memSeparator" colspan="2">&#160;</td></tr> 136 </table> 137 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 138 <div class="textblock"><p>Default stack memory allocation implementation. </p> 139 <dl class="section author"><dt>Author</dt><dd>Mike Becker </dd> 140 <dd> 141 Olaf Wintermann </dd></dl> 142 </div><h2 class="groupheader">Macro Definition Documentation</h2> 143 <a id="a3b761343c6491222604341ebfa443226"></a> 144 <h2 class="memtitle"><span class="permalink"><a href="#a3b761343c6491222604341ebfa443226">&#9670;&nbsp;</a></span>ucx_stack_dim</h2> 145 146 <div class="memitem"> 147 <div class="memproto"> 148 <table class="memname"> 149 <tr> 150 <td class="memname">#define ucx_stack_dim</td> 151 <td>(</td> 152 <td class="paramtype">&#160;</td> 153 <td class="paramname">size, </td> 154 </tr> 155 <tr> 156 <td class="paramkey"></td> 157 <td></td> 158 <td class="paramtype">&#160;</td> 159 <td class="paramname">elems&#160;</td> 160 </tr> 161 <tr> 162 <td></td> 163 <td>)</td> 164 <td></td><td></td> 165 </tr> 166 </table> 167 </div><div class="memdoc"> 168 <b>Value:</b><div class="fragment"><div class="line">(size+<span class="keyword">sizeof</span>(<span class="keyword">struct </span><a class="code" href="structucx__stack__metadata.html">ucx_stack_metadata</a>) * \</div><div class="line"> (elems + 1))</div><div class="ttc" id="structucx__stack__metadata_html"><div class="ttname"><a href="structucx__stack__metadata.html">ucx_stack_metadata</a></div><div class="ttdoc">Metadata for each UCX stack element. </div><div class="ttdef"><b>Definition:</b> stack.h:69</div></div> 169 </div><!-- fragment --> 170 <p>Computes a recommended size for the stack memory area. </p> 171 <p>Note, that reallocations have not been taken into account, so you might need to reserve twice as much memory to allow many reallocations.</p> 172 <dl class="params"><dt>Parameters</dt><dd> 173 <table class="params"> 174 <tr><td class="paramname">size</td><td>the approximate payload </td></tr> 175 <tr><td class="paramname">elems</td><td>the approximate count of element allocations </td></tr> 176 </table> 177 </dd> 178 </dl> 179 <dl class="section return"><dt>Returns</dt><dd>a recommended size for the stack space based on the information provided </dd></dl> 180 181 </div> 182 </div> 183 <a id="a4f7239dbd6c032c56812e370b71c1985"></a> 184 <h2 class="memtitle"><span class="permalink"><a href="#a4f7239dbd6c032c56812e370b71c1985">&#9670;&nbsp;</a></span>ucx_stack_empty</h2> 185 186 <div class="memitem"> 187 <div class="memproto"> 188 <table class="memname"> 189 <tr> 190 <td class="memname">#define ucx_stack_empty</td> 191 <td>(</td> 192 <td class="paramtype">&#160;</td> 193 <td class="paramname">stack</td><td>)</td> 194 <td>&#160;&#160;&#160;(!(stack)-&gt;top)</td> 195 </tr> 196 </table> 197 </div><div class="memdoc"> 198 199 <p>Checks, if the stack is empty. </p> 200 <dl class="params"><dt>Parameters</dt><dd> 201 <table class="params"> 202 <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 203 </table> 204 </dd> 205 </dl> 206 <dl class="section return"><dt>Returns</dt><dd>nonzero, if the stack is empty, zero otherwise </dd></dl> 207 208 </div> 209 </div> 210 <a id="a506b82374734ec476d086ddfb561174d"></a> 211 <h2 class="memtitle"><span class="permalink"><a href="#a506b82374734ec476d086ddfb561174d">&#9670;&nbsp;</a></span>ucx_stack_pop</h2> 212 213 <div class="memitem"> 214 <div class="memproto"> 215 <table class="memname"> 216 <tr> 217 <td class="memname">#define ucx_stack_pop</td> 218 <td>(</td> 219 <td class="paramtype">&#160;</td> 220 <td class="paramname">stack, </td> 221 </tr> 222 <tr> 223 <td class="paramkey"></td> 224 <td></td> 225 <td class="paramtype">&#160;</td> 226 <td class="paramname">dest&#160;</td> 227 </tr> 228 <tr> 229 <td></td> 230 <td>)</td> 231 <td></td><td>&#160;&#160;&#160;<a class="el" href="stack_8h.html#a07ea48f28eab474dcfefbb86fa66ef81">ucx_stack_popn</a>(stack, dest, (size_t)-1)</td> 232 </tr> 233 </table> 234 </div><div class="memdoc"> 235 236 <p>Removes the top most element from the stack and copies the content to <code> dest</code>, if specified. </p> 237 <p>Use <a class="el" href="stack_8h.html#a030197051a803e87d5eeac5adb80b15a" title="Returns the size of the top most element. ">ucx_stack_topsize()</a># to get the amount of memory that must be available at the location of <code>dest</code>.</p> 238 <dl class="params"><dt>Parameters</dt><dd> 239 <table class="params"> 240 <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 241 <tr><td class="paramname">dest</td><td>the location where the contents shall be written to, or <code> NULL</code>, if the element shall only be removed. </td></tr> 242 </table> 243 </dd> 244 </dl> 245 <dl class="section see"><dt>See also</dt><dd><a class="el" href="stack_8h.html#aabd55c14a3866b3782ba324f4d8b4c41" title="Frees memory on the stack. ">ucx_stack_free</a> </dd> 246 <dd> 247 <a class="el" href="stack_8h.html#a07ea48f28eab474dcfefbb86fa66ef81" title="Removes the top most element from the stack and copies the content to dest. ">ucx_stack_popn</a> </dd></dl> 248 249 </div> 250 </div> 251 <a id="a030197051a803e87d5eeac5adb80b15a"></a> 252 <h2 class="memtitle"><span class="permalink"><a href="#a030197051a803e87d5eeac5adb80b15a">&#9670;&nbsp;</a></span>ucx_stack_topsize</h2> 253 254 <div class="memitem"> 255 <div class="memproto"> 256 <table class="memname"> 257 <tr> 258 <td class="memname">#define ucx_stack_topsize</td> 259 <td>(</td> 260 <td class="paramtype">&#160;</td> 261 <td class="paramname">stack</td><td>)</td> 262 <td></td> 263 </tr> 264 </table> 265 </div><div class="memdoc"> 266 <b>Value:</b><div class="fragment"><div class="line">((stack)-&gt;top ? ((<span class="keyword">struct</span> <a class="code" href="structucx__stack__metadata.html">ucx_stack_metadata</a>*)\</div><div class="line"> (stack)-&gt;top - 1)-&gt;size : 0)</div><div class="ttc" id="structucx__stack__metadata_html"><div class="ttname"><a href="structucx__stack__metadata.html">ucx_stack_metadata</a></div><div class="ttdoc">Metadata for each UCX stack element. </div><div class="ttdef"><b>Definition:</b> stack.h:69</div></div> 267 </div><!-- fragment --> 268 <p>Returns the size of the top most element. </p> 269 <dl class="params"><dt>Parameters</dt><dd> 270 <table class="params"> 271 <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 272 </table> 273 </dd> 274 </dl> 275 <dl class="section return"><dt>Returns</dt><dd>the size of the top most element </dd></dl> 276 277 </div> 278 </div> 279 <h2 class="groupheader">Function Documentation</h2> 280 <a id="a53cd2c7743dc8ad9cbd35ade0b4873e7"></a> 281 <h2 class="memtitle"><span class="permalink"><a href="#a53cd2c7743dc8ad9cbd35ade0b4873e7">&#9670;&nbsp;</a></span>ucx_stack_avail()</h2> 282 283 <div class="memitem"> 284 <div class="memproto"> 285 <table class="memname"> 286 <tr> 287 <td class="memname">size_t ucx_stack_avail </td> 288 <td>(</td> 289 <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> *&#160;</td> 290 <td class="paramname"><em>stack</em></td><td>)</td> 291 <td></td> 292 </tr> 293 </table> 294 </div><div class="memdoc"> 295 296 <p>Returns the remaining available memory on the specified stack. </p> 297 <dl class="params"><dt>Parameters</dt><dd> 298 <table class="params"> 299 <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 300 </table> 301 </dd> 302 </dl> 303 <dl class="section return"><dt>Returns</dt><dd>the remaining available memory </dd></dl> 304 305 </div> 306 </div> 307 <a id="afdc467524b5e19a9a777c6bc03e17174"></a> 308 <h2 class="memtitle"><span class="permalink"><a href="#afdc467524b5e19a9a777c6bc03e17174">&#9670;&nbsp;</a></span>ucx_stack_calloc()</h2> 309 310 <div class="memitem"> 311 <div class="memproto"> 312 <table class="memname"> 313 <tr> 314 <td class="memname">void* ucx_stack_calloc </td> 315 <td>(</td> 316 <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> *&#160;</td> 317 <td class="paramname"><em>stack</em>, </td> 318 </tr> 319 <tr> 320 <td class="paramkey"></td> 321 <td></td> 322 <td class="paramtype">size_t&#160;</td> 323 <td class="paramname"><em>nelem</em>, </td> 324 </tr> 325 <tr> 326 <td class="paramkey"></td> 327 <td></td> 328 <td class="paramtype">size_t&#160;</td> 329 <td class="paramname"><em>elsize</em>&#160;</td> 330 </tr> 331 <tr> 332 <td></td> 333 <td>)</td> 334 <td></td><td></td> 335 </tr> 336 </table> 337 </div><div class="memdoc"> 338 339 <p>Allocates an array of stack memory. </p> 340 <p>The content of the allocated memory is set to zero.</p> 341 <dl class="params"><dt>Parameters</dt><dd> 342 <table class="params"> 343 <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 344 <tr><td class="paramname">nelem</td><td>amount of elements to allocate </td></tr> 345 <tr><td class="paramname">elsize</td><td>amount of memory per element </td></tr> 346 </table> 347 </dd> 348 </dl> 349 <dl class="section return"><dt>Returns</dt><dd>a pointer to the allocated memory </dd></dl> 350 <dl class="section see"><dt>See also</dt><dd><a class="el" href="allocator_8h.html#a2c0aba4221c1ac6801f03ed799f15b12" title="A function pointer to the allocators calloc() function. ">ucx_allocator_calloc()</a> </dd></dl> 351 352 </div> 353 </div> 354 <a id="aabd55c14a3866b3782ba324f4d8b4c41"></a> 355 <h2 class="memtitle"><span class="permalink"><a href="#aabd55c14a3866b3782ba324f4d8b4c41">&#9670;&nbsp;</a></span>ucx_stack_free()</h2> 356 357 <div class="memitem"> 358 <div class="memproto"> 359 <table class="memname"> 360 <tr> 361 <td class="memname">void ucx_stack_free </td> 362 <td>(</td> 363 <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> *&#160;</td> 364 <td class="paramname"><em>stack</em>, </td> 365 </tr> 366 <tr> 367 <td class="paramkey"></td> 368 <td></td> 369 <td class="paramtype">void *&#160;</td> 370 <td class="paramname"><em>ptr</em>&#160;</td> 371 </tr> 372 <tr> 373 <td></td> 374 <td>)</td> 375 <td></td><td></td> 376 </tr> 377 </table> 378 </div><div class="memdoc"> 379 380 <p>Frees memory on the stack. </p> 381 <p>Freeing stack memory behaves in a special way.</p> 382 <p>If the element, that should be freed, is the top most element of the stack, it is removed from the stack. Otherwise it is marked as freed. Marked elements are removed, when they become the top most elements of the stack.</p> 383 <dl class="params"><dt>Parameters</dt><dd> 384 <table class="params"> 385 <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 386 <tr><td class="paramname">ptr</td><td>a pointer to the memory that shall be freed </td></tr> 387 </table> 388 </dd> 389 </dl> 390 391 </div> 392 </div> 393 <a id="abaef685df4e7ef95cd7218984a0618fe"></a> 394 <h2 class="memtitle"><span class="permalink"><a href="#abaef685df4e7ef95cd7218984a0618fe">&#9670;&nbsp;</a></span>ucx_stack_init()</h2> 395 396 <div class="memitem"> 397 <div class="memproto"> 398 <table class="memname"> 399 <tr> 400 <td class="memname">void ucx_stack_init </td> 401 <td>(</td> 402 <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> *&#160;</td> 403 <td class="paramname"><em>stack</em>, </td> 404 </tr> 405 <tr> 406 <td class="paramkey"></td> 407 <td></td> 408 <td class="paramtype">char *&#160;</td> 409 <td class="paramname"><em>space</em>, </td> 410 </tr> 411 <tr> 412 <td class="paramkey"></td> 413 <td></td> 414 <td class="paramtype">size_t&#160;</td> 415 <td class="paramname"><em>size</em>&#160;</td> 416 </tr> 417 <tr> 418 <td></td> 419 <td>)</td> 420 <td></td><td></td> 421 </tr> 422 </table> 423 </div><div class="memdoc"> 424 425 <p>Initializes <a class="el" href="structUcxStack.html" title="UCX stack structure. ">UcxStack</a> structure with memory. </p> 426 <dl class="params"><dt>Parameters</dt><dd> 427 <table class="params"> 428 <tr><td class="paramname">stack</td><td>a pointer to an uninitialized stack structure </td></tr> 429 <tr><td class="paramname">space</td><td>the memory area that shall be managed </td></tr> 430 <tr><td class="paramname">size</td><td>size of the memory area </td></tr> 431 </table> 432 </dd> 433 </dl> 434 <dl class="section return"><dt>Returns</dt><dd>a new <a class="el" href="structUcxStack.html" title="UCX stack structure. ">UcxStack</a> structure </dd></dl> 435 436 </div> 437 </div> 438 <a id="af865b416802140f6b6e8ab3626d7d1ac"></a> 439 <h2 class="memtitle"><span class="permalink"><a href="#af865b416802140f6b6e8ab3626d7d1ac">&#9670;&nbsp;</a></span>ucx_stack_malloc()</h2> 440 441 <div class="memitem"> 442 <div class="memproto"> 443 <table class="memname"> 444 <tr> 445 <td class="memname">void* ucx_stack_malloc </td> 446 <td>(</td> 447 <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> *&#160;</td> 448 <td class="paramname"><em>stack</em>, </td> 449 </tr> 450 <tr> 451 <td class="paramkey"></td> 452 <td></td> 453 <td class="paramtype">size_t&#160;</td> 454 <td class="paramname"><em>n</em>&#160;</td> 455 </tr> 456 <tr> 457 <td></td> 458 <td>)</td> 459 <td></td><td></td> 460 </tr> 461 </table> 462 </div><div class="memdoc"> 463 464 <p>Allocates stack memory. </p> 465 <dl class="params"><dt>Parameters</dt><dd> 466 <table class="params"> 467 <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 468 <tr><td class="paramname">n</td><td>amount of memory to allocate </td></tr> 469 </table> 470 </dd> 471 </dl> 472 <dl class="section return"><dt>Returns</dt><dd>a pointer to the allocated memory or <code>NULL</code> on stack overflow </dd></dl> 473 <dl class="section see"><dt>See also</dt><dd><a class="el" href="allocator_8h.html#a29f0f6a23a70db3b60635cd6dc384473" title="A function pointer to the allocators malloc() function. ">ucx_allocator_malloc()</a> </dd></dl> 474 475 </div> 476 </div> 477 <a id="a07ea48f28eab474dcfefbb86fa66ef81"></a> 478 <h2 class="memtitle"><span class="permalink"><a href="#a07ea48f28eab474dcfefbb86fa66ef81">&#9670;&nbsp;</a></span>ucx_stack_popn()</h2> 479 480 <div class="memitem"> 481 <div class="memproto"> 482 <table class="memname"> 483 <tr> 484 <td class="memname">void ucx_stack_popn </td> 485 <td>(</td> 486 <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> *&#160;</td> 487 <td class="paramname"><em>stack</em>, </td> 488 </tr> 489 <tr> 490 <td class="paramkey"></td> 491 <td></td> 492 <td class="paramtype">void *&#160;</td> 493 <td class="paramname"><em>dest</em>, </td> 494 </tr> 495 <tr> 496 <td class="paramkey"></td> 497 <td></td> 498 <td class="paramtype">size_t&#160;</td> 499 <td class="paramname"><em>n</em>&#160;</td> 500 </tr> 501 <tr> 502 <td></td> 503 <td>)</td> 504 <td></td><td></td> 505 </tr> 506 </table> 507 </div><div class="memdoc"> 508 509 <p>Removes the top most element from the stack and copies the content to <code> dest</code>. </p> 510 <p>This function copies at most <code>n</code> bytes to the destination, but the element is always freed as a whole. If the element was larger than <code>n</code>, the remaining data is lost.</p> 511 <dl class="params"><dt>Parameters</dt><dd> 512 <table class="params"> 513 <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 514 <tr><td class="paramname">dest</td><td>the location where the contents shall be written to </td></tr> 515 <tr><td class="paramname">n</td><td>copies at most n bytes to <code>dest</code> </td></tr> 516 </table> 517 </dd> 518 </dl> 519 <dl class="section see"><dt>See also</dt><dd><a class="el" href="stack_8h.html#a506b82374734ec476d086ddfb561174d" title="Removes the top most element from the stack and copies the content to dest, if specified. ">ucx_stack_pop</a> </dd></dl> 520 521 </div> 522 </div> 523 <a id="af85e6f77a8341beb6188f9ae1a8e9f92"></a> 524 <h2 class="memtitle"><span class="permalink"><a href="#af85e6f77a8341beb6188f9ae1a8e9f92">&#9670;&nbsp;</a></span>ucx_stack_push()</h2> 525 526 <div class="memitem"> 527 <div class="memproto"> 528 <table class="memname"> 529 <tr> 530 <td class="memname">void* ucx_stack_push </td> 531 <td>(</td> 532 <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> *&#160;</td> 533 <td class="paramname"><em>stack</em>, </td> 534 </tr> 535 <tr> 536 <td class="paramkey"></td> 537 <td></td> 538 <td class="paramtype">size_t&#160;</td> 539 <td class="paramname"><em>n</em>, </td> 540 </tr> 541 <tr> 542 <td class="paramkey"></td> 543 <td></td> 544 <td class="paramtype">const void *&#160;</td> 545 <td class="paramname"><em>data</em>&#160;</td> 546 </tr> 547 <tr> 548 <td></td> 549 <td>)</td> 550 <td></td><td></td> 551 </tr> 552 </table> 553 </div><div class="memdoc"> 554 555 <p>Allocates memory with <a class="el" href="stack_8h.html#af865b416802140f6b6e8ab3626d7d1ac" title="Allocates stack memory. ">ucx_stack_malloc()</a> and copies the specified data if the allocation was successful. </p> 556 <dl class="params"><dt>Parameters</dt><dd> 557 <table class="params"> 558 <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 559 <tr><td class="paramname">n</td><td>amount of memory to allocate </td></tr> 560 <tr><td class="paramname">data</td><td>a pointer to the data to copy </td></tr> 561 </table> 562 </dd> 563 </dl> 564 <dl class="section return"><dt>Returns</dt><dd>a pointer to the allocated memory </dd></dl> 565 <dl class="section see"><dt>See also</dt><dd><a class="el" href="stack_8h.html#af865b416802140f6b6e8ab3626d7d1ac" title="Allocates stack memory. ">ucx_stack_malloc</a> </dd></dl> 566 567 </div> 568 </div> 569 <a id="a7bb138979191bba138e76ea37488fae2"></a> 570 <h2 class="memtitle"><span class="permalink"><a href="#a7bb138979191bba138e76ea37488fae2">&#9670;&nbsp;</a></span>ucx_stack_pusharr()</h2> 571 572 <div class="memitem"> 573 <div class="memproto"> 574 <table class="memname"> 575 <tr> 576 <td class="memname">void* ucx_stack_pusharr </td> 577 <td>(</td> 578 <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> *&#160;</td> 579 <td class="paramname"><em>stack</em>, </td> 580 </tr> 581 <tr> 582 <td class="paramkey"></td> 583 <td></td> 584 <td class="paramtype">size_t&#160;</td> 585 <td class="paramname"><em>nelem</em>, </td> 586 </tr> 587 <tr> 588 <td class="paramkey"></td> 589 <td></td> 590 <td class="paramtype">size_t&#160;</td> 591 <td class="paramname"><em>elsize</em>, </td> 592 </tr> 593 <tr> 594 <td class="paramkey"></td> 595 <td></td> 596 <td class="paramtype">const void *&#160;</td> 597 <td class="paramname"><em>data</em>&#160;</td> 598 </tr> 599 <tr> 600 <td></td> 601 <td>)</td> 602 <td></td><td></td> 603 </tr> 604 </table> 605 </div><div class="memdoc"> 606 607 <p>Allocates memory with <a class="el" href="stack_8h.html#afdc467524b5e19a9a777c6bc03e17174" title="Allocates an array of stack memory. ">ucx_stack_calloc()</a> and copies the specified data if the allocation was successful. </p> 608 <dl class="params"><dt>Parameters</dt><dd> 609 <table class="params"> 610 <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 611 <tr><td class="paramname">nelem</td><td>amount of elements to allocate </td></tr> 612 <tr><td class="paramname">elsize</td><td>amount of memory per element </td></tr> 613 <tr><td class="paramname">data</td><td>a pointer to the data </td></tr> 614 </table> 615 </dd> 616 </dl> 617 <dl class="section return"><dt>Returns</dt><dd>a pointer to the allocated memory </dd></dl> 618 <dl class="section see"><dt>See also</dt><dd><a class="el" href="stack_8h.html#afdc467524b5e19a9a777c6bc03e17174" title="Allocates an array of stack memory. ">ucx_stack_calloc</a> </dd></dl> 619 620 </div> 621 </div> 622 <a id="a0c678f96f6fabab49b2b034a1fe91c3a"></a> 623 <h2 class="memtitle"><span class="permalink"><a href="#a0c678f96f6fabab49b2b034a1fe91c3a">&#9670;&nbsp;</a></span>ucx_stack_realloc()</h2> 624 625 <div class="memitem"> 626 <div class="memproto"> 627 <table class="memname"> 628 <tr> 629 <td class="memname">void* ucx_stack_realloc </td> 630 <td>(</td> 631 <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> *&#160;</td> 632 <td class="paramname"><em>stack</em>, </td> 633 </tr> 634 <tr> 635 <td class="paramkey"></td> 636 <td></td> 637 <td class="paramtype">void *&#160;</td> 638 <td class="paramname"><em>ptr</em>, </td> 639 </tr> 640 <tr> 641 <td class="paramkey"></td> 642 <td></td> 643 <td class="paramtype">size_t&#160;</td> 644 <td class="paramname"><em>n</em>&#160;</td> 645 </tr> 646 <tr> 647 <td></td> 648 <td>)</td> 649 <td></td><td></td> 650 </tr> 651 </table> 652 </div><div class="memdoc"> 653 654 <p>Reallocates memory on the stack. </p> 655 <p>Shrinking memory is always safe. Extending memory can be very expensive.</p> 656 <dl class="params"><dt>Parameters</dt><dd> 657 <table class="params"> 658 <tr><td class="paramname">stack</td><td>the stack </td></tr> 659 <tr><td class="paramname">ptr</td><td>a pointer to the memory that shall be reallocated </td></tr> 660 <tr><td class="paramname">n</td><td>the new size of the memory </td></tr> 661 </table> 662 </dd> 663 </dl> 664 <dl class="section return"><dt>Returns</dt><dd>a pointer to the new location of the memory </dd></dl> 665 <dl class="section see"><dt>See also</dt><dd><a class="el" href="allocator_8h.html#a6d7cf038a806e327c5da37321d04e426" title="A function pointer to the allocators realloc() function. ">ucx_allocator_realloc()</a> </dd></dl> 666 667 </div> 668 </div> 669 </div><!-- contents --> 670 <!-- start footer part --> 671 <hr class="footer"/><address class="footer"><small> 672 Generated on Thu Dec 19 2019 19:58:24 for ucx by &#160;<a href="http://www.doxygen.org/index.html"> 673 <img class="footer" src="doxygen.png" alt="doxygen"/> 674 </a> 1.8.13 675 </small></address> 676 </body> 677 </html> 678