1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/docs/api-2.1/ucx_8h.html Sat Feb 06 19:11:44 2021 +0100 1.3 @@ -0,0 +1,388 @@ 1.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 1.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 1.6 +<head> 1.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 1.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 1.9 +<meta name="generator" content="Doxygen 1.8.13"/> 1.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 1.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/ucx.h File Reference</title> 1.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 1.13 +<script type="text/javascript" src="jquery.js"></script> 1.14 +<script type="text/javascript" src="dynsections.js"></script> 1.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 1.16 +<script type="text/javascript" src="search/searchdata.js"></script> 1.17 +<script type="text/javascript" src="search/search.js"></script> 1.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 1.19 +</head> 1.20 +<body> 1.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 1.22 +<div id="titlearea"> 1.23 +<table cellspacing="0" cellpadding="0"> 1.24 + <tbody> 1.25 + <tr style="height: 56px;"> 1.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 1.27 + <td id="projectalign" style="padding-left: 0.5em;"> 1.28 + <div id="projectname">ucx 1.29 + </div> 1.30 + <div id="projectbrief">UAP Common Extensions</div> 1.31 + </td> 1.32 + </tr> 1.33 + </tbody> 1.34 +</table> 1.35 +</div> 1.36 +<!-- end header part --> 1.37 +<!-- Generated by Doxygen 1.8.13 --> 1.38 +<script type="text/javascript"> 1.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 1.40 +</script> 1.41 +<script type="text/javascript" src="menudata.js"></script> 1.42 +<script type="text/javascript" src="menu.js"></script> 1.43 +<script type="text/javascript"> 1.44 +$(function() { 1.45 + initMenu('',true,false,'search.php','Search'); 1.46 + $(document).ready(function() { init_search(); }); 1.47 +}); 1.48 +</script> 1.49 +<div id="main-nav"></div> 1.50 +<!-- window showing the filter options --> 1.51 +<div id="MSearchSelectWindow" 1.52 + onmouseover="return searchBox.OnSearchSelectShow()" 1.53 + onmouseout="return searchBox.OnSearchSelectHide()" 1.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 1.55 +</div> 1.56 + 1.57 +<!-- iframe showing the search results (closed by default) --> 1.58 +<div id="MSearchResultsWindow"> 1.59 +<iframe src="javascript:void(0)" frameborder="0" 1.60 + name="MSearchResults" id="MSearchResults"> 1.61 +</iframe> 1.62 +</div> 1.63 + 1.64 +<div id="nav-path" class="navpath"> 1.65 + <ul> 1.66 +<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> 1.67 +</div> 1.68 +</div><!-- top --> 1.69 +<div class="header"> 1.70 + <div class="summary"> 1.71 +<a href="#define-members">Macros</a> | 1.72 +<a href="#typedef-members">Typedefs</a> | 1.73 +<a href="#func-members">Functions</a> </div> 1.74 + <div class="headertitle"> 1.75 +<div class="title">ucx.h File Reference</div> </div> 1.76 +</div><!--header--> 1.77 +<div class="contents"> 1.78 + 1.79 +<p>Main UCX Header providing most common definitions. 1.80 +<a href="#details">More...</a></p> 1.81 +<div class="textblock"><code>#include <stdlib.h></code><br /> 1.82 +<code>#include <stdint.h></code><br /> 1.83 +<code>#include <sys/types.h></code><br /> 1.84 +</div> 1.85 +<p><a href="ucx_8h_source.html">Go to the source code of this file.</a></p> 1.86 +<table class="memberdecls"> 1.87 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> 1.88 +Macros</h2></td></tr> 1.89 +<tr class="memitem:aa57e5dd22d42387d748cc16777df1383"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#aa57e5dd22d42387d748cc16777df1383">UCX_VERSION_MAJOR</a>   2</td></tr> 1.90 +<tr class="memdesc:aa57e5dd22d42387d748cc16777df1383"><td class="mdescLeft"> </td><td class="mdescRight">Major UCX version as integer constant. <a href="#aa57e5dd22d42387d748cc16777df1383">More...</a><br /></td></tr> 1.91 +<tr class="separator:aa57e5dd22d42387d748cc16777df1383"><td class="memSeparator" colspan="2"> </td></tr> 1.92 +<tr class="memitem:a9ac10d6353e23d4615a87fc737c65eb0"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#a9ac10d6353e23d4615a87fc737c65eb0">UCX_VERSION_MINOR</a>   1</td></tr> 1.93 +<tr class="memdesc:a9ac10d6353e23d4615a87fc737c65eb0"><td class="mdescLeft"> </td><td class="mdescRight">Minor UCX version as integer constant. <a href="#a9ac10d6353e23d4615a87fc737c65eb0">More...</a><br /></td></tr> 1.94 +<tr class="separator:a9ac10d6353e23d4615a87fc737c65eb0"><td class="memSeparator" colspan="2"> </td></tr> 1.95 +<tr class="memitem:af12001920ca2fc1405615684e4dea284"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#af12001920ca2fc1405615684e4dea284">UCX_VERSION</a>   (((<a class="el" href="ucx_8h.html#aa57e5dd22d42387d748cc16777df1383">UCX_VERSION_MAJOR</a>)<<16)|<a class="el" href="ucx_8h.html#a9ac10d6353e23d4615a87fc737c65eb0">UCX_VERSION_MINOR</a>)</td></tr> 1.96 +<tr class="memdesc:af12001920ca2fc1405615684e4dea284"><td class="mdescLeft"> </td><td class="mdescRight">Version constant which ensures to increase monotonically. <a href="#af12001920ca2fc1405615684e4dea284">More...</a><br /></td></tr> 1.97 +<tr class="separator:af12001920ca2fc1405615684e4dea284"><td class="memSeparator" colspan="2"> </td></tr> 1.98 +<tr class="memitem:a0b5ed6c1a0b15356f4f948acfd32a4cc"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#a0b5ed6c1a0b15356f4f948acfd32a4cc">ucx_szmul</a>(a, b, result)   <a class="el" href="ucx_8h.html#a6637171cc0ec097b297f731a3036dd3b">ucx_szmul_impl</a>(a, b, result)</td></tr> 1.99 +<tr class="memdesc:a0b5ed6c1a0b15356f4f948acfd32a4cc"><td class="mdescLeft"> </td><td class="mdescRight">Performs a multiplication of size_t values and checks for overflow. <a href="#a0b5ed6c1a0b15356f4f948acfd32a4cc">More...</a><br /></td></tr> 1.100 +<tr class="separator:a0b5ed6c1a0b15356f4f948acfd32a4cc"><td class="memSeparator" colspan="2"> </td></tr> 1.101 +</table><table class="memberdecls"> 1.102 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a> 1.103 +Typedefs</h2></td></tr> 1.104 +<tr class="memitem:ad2b370c2809914c8b7fedab163c266b3"><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a>) (void *)</td></tr> 1.105 +<tr class="memdesc:ad2b370c2809914c8b7fedab163c266b3"><td class="mdescLeft"> </td><td class="mdescRight">A function pointer to a destructor function. <a href="#ad2b370c2809914c8b7fedab163c266b3">More...</a><br /></td></tr> 1.106 +<tr class="separator:ad2b370c2809914c8b7fedab163c266b3"><td class="memSeparator" colspan="2"> </td></tr> 1.107 +<tr class="memitem:afe5e2d5dbf34778e0e97852051570791"><td class="memItemLeft" align="right" valign="top">typedef int(* </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a>) (const void *, const void *, void *)</td></tr> 1.108 +<tr class="memdesc:afe5e2d5dbf34778e0e97852051570791"><td class="mdescLeft"> </td><td class="mdescRight">Function pointer to a compare function. <a href="#afe5e2d5dbf34778e0e97852051570791">More...</a><br /></td></tr> 1.109 +<tr class="separator:afe5e2d5dbf34778e0e97852051570791"><td class="memSeparator" colspan="2"> </td></tr> 1.110 +<tr class="memitem:a0bc5bf89e556c1d45d10863d52728ac9"><td class="memItemLeft" align="right" valign="top">typedef intmax_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9">distance_func</a>) (const void *, const void *, void *)</td></tr> 1.111 +<tr class="memdesc:a0bc5bf89e556c1d45d10863d52728ac9"><td class="mdescLeft"> </td><td class="mdescRight">Function pointer to a distance function. <a href="#a0bc5bf89e556c1d45d10863d52728ac9">More...</a><br /></td></tr> 1.112 +<tr class="separator:a0bc5bf89e556c1d45d10863d52728ac9"><td class="memSeparator" colspan="2"> </td></tr> 1.113 +<tr class="memitem:aab917a5fe0965673c73e8ebd0a1fc967"><td class="memItemLeft" align="right" valign="top">typedef void *(* </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a>) (const void *, void *)</td></tr> 1.114 +<tr class="memdesc:aab917a5fe0965673c73e8ebd0a1fc967"><td class="mdescLeft"> </td><td class="mdescRight">Function pointer to a copy function. <a href="#aab917a5fe0965673c73e8ebd0a1fc967">More...</a><br /></td></tr> 1.115 +<tr class="separator:aab917a5fe0965673c73e8ebd0a1fc967"><td class="memSeparator" colspan="2"> </td></tr> 1.116 +<tr class="memitem:a989b3f0fa4d307d278378fde435641ed"><td class="memItemLeft" align="right" valign="top">typedef size_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a>) (const void *, size_t, size_t, void *)</td></tr> 1.117 +<tr class="memdesc:a989b3f0fa4d307d278378fde435641ed"><td class="mdescLeft"> </td><td class="mdescRight">Function pointer to a write function. <a href="#a989b3f0fa4d307d278378fde435641ed">More...</a><br /></td></tr> 1.118 +<tr class="separator:a989b3f0fa4d307d278378fde435641ed"><td class="memSeparator" colspan="2"> </td></tr> 1.119 +<tr class="memitem:a6a67e255e460acb58f802067b3ff5fd5"><td class="memItemLeft" align="right" valign="top">typedef size_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5">read_func</a>) (void *, size_t, size_t, void *)</td></tr> 1.120 +<tr class="memdesc:a6a67e255e460acb58f802067b3ff5fd5"><td class="mdescLeft"> </td><td class="mdescRight">Function pointer to a read function. <a href="#a6a67e255e460acb58f802067b3ff5fd5">More...</a><br /></td></tr> 1.121 +<tr class="separator:a6a67e255e460acb58f802067b3ff5fd5"><td class="memSeparator" colspan="2"> </td></tr> 1.122 +</table><table class="memberdecls"> 1.123 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> 1.124 +Functions</h2></td></tr> 1.125 +<tr class="memitem:a6637171cc0ec097b297f731a3036dd3b"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#a6637171cc0ec097b297f731a3036dd3b">ucx_szmul_impl</a> (size_t a, size_t b, size_t *result)</td></tr> 1.126 +<tr class="memdesc:a6637171cc0ec097b297f731a3036dd3b"><td class="mdescLeft"> </td><td class="mdescRight">Performs a multiplication of size_t values and checks for overflow. <a href="#a6637171cc0ec097b297f731a3036dd3b">More...</a><br /></td></tr> 1.127 +<tr class="separator:a6637171cc0ec097b297f731a3036dd3b"><td class="memSeparator" colspan="2"> </td></tr> 1.128 +</table> 1.129 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 1.130 +<div class="textblock"><p>Main UCX Header providing most common definitions. </p> 1.131 +<dl class="section author"><dt>Author</dt><dd>Mike Becker </dd> 1.132 +<dd> 1.133 +Olaf Wintermann </dd></dl> 1.134 +</div><h2 class="groupheader">Macro Definition Documentation</h2> 1.135 +<a id="a0b5ed6c1a0b15356f4f948acfd32a4cc"></a> 1.136 +<h2 class="memtitle"><span class="permalink"><a href="#a0b5ed6c1a0b15356f4f948acfd32a4cc">◆ </a></span>ucx_szmul</h2> 1.137 + 1.138 +<div class="memitem"> 1.139 +<div class="memproto"> 1.140 + <table class="memname"> 1.141 + <tr> 1.142 + <td class="memname">#define ucx_szmul</td> 1.143 + <td>(</td> 1.144 + <td class="paramtype"> </td> 1.145 + <td class="paramname">a, </td> 1.146 + </tr> 1.147 + <tr> 1.148 + <td class="paramkey"></td> 1.149 + <td></td> 1.150 + <td class="paramtype"> </td> 1.151 + <td class="paramname">b, </td> 1.152 + </tr> 1.153 + <tr> 1.154 + <td class="paramkey"></td> 1.155 + <td></td> 1.156 + <td class="paramtype"> </td> 1.157 + <td class="paramname">result </td> 1.158 + </tr> 1.159 + <tr> 1.160 + <td></td> 1.161 + <td>)</td> 1.162 + <td></td><td>   <a class="el" href="ucx_8h.html#a6637171cc0ec097b297f731a3036dd3b">ucx_szmul_impl</a>(a, b, result)</td> 1.163 + </tr> 1.164 + </table> 1.165 +</div><div class="memdoc"> 1.166 + 1.167 +<p>Performs a multiplication of size_t values and checks for overflow. </p> 1.168 +<dl class="params"><dt>Parameters</dt><dd> 1.169 + <table class="params"> 1.170 + <tr><td class="paramname">a</td><td>first operand </td></tr> 1.171 + <tr><td class="paramname">b</td><td>second operand </td></tr> 1.172 + <tr><td class="paramname">result</td><td>a pointer to a size_t, where the result should be stored </td></tr> 1.173 + </table> 1.174 + </dd> 1.175 +</dl> 1.176 +<dl class="section return"><dt>Returns</dt><dd>zero, if no overflow occurred and the result is correct, non-zero otherwise </dd></dl> 1.177 + 1.178 +</div> 1.179 +</div> 1.180 +<a id="af12001920ca2fc1405615684e4dea284"></a> 1.181 +<h2 class="memtitle"><span class="permalink"><a href="#af12001920ca2fc1405615684e4dea284">◆ </a></span>UCX_VERSION</h2> 1.182 + 1.183 +<div class="memitem"> 1.184 +<div class="memproto"> 1.185 + <table class="memname"> 1.186 + <tr> 1.187 + <td class="memname">#define UCX_VERSION   (((<a class="el" href="ucx_8h.html#aa57e5dd22d42387d748cc16777df1383">UCX_VERSION_MAJOR</a>)<<16)|<a class="el" href="ucx_8h.html#a9ac10d6353e23d4615a87fc737c65eb0">UCX_VERSION_MINOR</a>)</td> 1.188 + </tr> 1.189 + </table> 1.190 +</div><div class="memdoc"> 1.191 + 1.192 +<p>Version constant which ensures to increase monotonically. </p> 1.193 + 1.194 +</div> 1.195 +</div> 1.196 +<a id="aa57e5dd22d42387d748cc16777df1383"></a> 1.197 +<h2 class="memtitle"><span class="permalink"><a href="#aa57e5dd22d42387d748cc16777df1383">◆ </a></span>UCX_VERSION_MAJOR</h2> 1.198 + 1.199 +<div class="memitem"> 1.200 +<div class="memproto"> 1.201 + <table class="memname"> 1.202 + <tr> 1.203 + <td class="memname">#define UCX_VERSION_MAJOR   2</td> 1.204 + </tr> 1.205 + </table> 1.206 +</div><div class="memdoc"> 1.207 + 1.208 +<p>Major UCX version as integer constant. </p> 1.209 + 1.210 +</div> 1.211 +</div> 1.212 +<a id="a9ac10d6353e23d4615a87fc737c65eb0"></a> 1.213 +<h2 class="memtitle"><span class="permalink"><a href="#a9ac10d6353e23d4615a87fc737c65eb0">◆ </a></span>UCX_VERSION_MINOR</h2> 1.214 + 1.215 +<div class="memitem"> 1.216 +<div class="memproto"> 1.217 + <table class="memname"> 1.218 + <tr> 1.219 + <td class="memname">#define UCX_VERSION_MINOR   1</td> 1.220 + </tr> 1.221 + </table> 1.222 +</div><div class="memdoc"> 1.223 + 1.224 +<p>Minor UCX version as integer constant. </p> 1.225 + 1.226 +</div> 1.227 +</div> 1.228 +<h2 class="groupheader">Typedef Documentation</h2> 1.229 +<a id="afe5e2d5dbf34778e0e97852051570791"></a> 1.230 +<h2 class="memtitle"><span class="permalink"><a href="#afe5e2d5dbf34778e0e97852051570791">◆ </a></span>cmp_func</h2> 1.231 + 1.232 +<div class="memitem"> 1.233 +<div class="memproto"> 1.234 + <table class="memname"> 1.235 + <tr> 1.236 + <td class="memname">typedef int(* cmp_func) (const void *, const void *, void *)</td> 1.237 + </tr> 1.238 + </table> 1.239 +</div><div class="memdoc"> 1.240 + 1.241 +<p>Function pointer to a compare function. </p> 1.242 +<p>The compare function shall take three arguments: the two values that shall be compared and optional additional data. The function shall then return -1 if the first argument is less than the second argument, 1 if the first argument is greater than the second argument and 0 if both arguments are equal. If the third argument is <code>NULL</code>, it shall be ignored. </p> 1.243 + 1.244 +</div> 1.245 +</div> 1.246 +<a id="aab917a5fe0965673c73e8ebd0a1fc967"></a> 1.247 +<h2 class="memtitle"><span class="permalink"><a href="#aab917a5fe0965673c73e8ebd0a1fc967">◆ </a></span>copy_func</h2> 1.248 + 1.249 +<div class="memitem"> 1.250 +<div class="memproto"> 1.251 + <table class="memname"> 1.252 + <tr> 1.253 + <td class="memname">typedef void*(* copy_func) (const void *, void *)</td> 1.254 + </tr> 1.255 + </table> 1.256 +</div><div class="memdoc"> 1.257 + 1.258 +<p>Function pointer to a copy function. </p> 1.259 +<p>The copy function shall create a copy of the first argument and may use additional data provided by the second argument. If the second argument is <code>NULL</code>, it shall be ignored.</p> 1.260 +<p><b>Attention:</b> if pointers returned by functions of this type may be passed to <code>free()</code> depends on the implementation of the respective <code>copy_func</code>. </p> 1.261 + 1.262 +</div> 1.263 +</div> 1.264 +<a id="a0bc5bf89e556c1d45d10863d52728ac9"></a> 1.265 +<h2 class="memtitle"><span class="permalink"><a href="#a0bc5bf89e556c1d45d10863d52728ac9">◆ </a></span>distance_func</h2> 1.266 + 1.267 +<div class="memitem"> 1.268 +<div class="memproto"> 1.269 + <table class="memname"> 1.270 + <tr> 1.271 + <td class="memname">typedef intmax_t(* distance_func) (const void *, const void *, void *)</td> 1.272 + </tr> 1.273 + </table> 1.274 +</div><div class="memdoc"> 1.275 + 1.276 +<p>Function pointer to a distance function. </p> 1.277 +<p>The distance function shall take three arguments: the two values for which the distance shall be computed and optional additional data. The function shall then return the signed distance as integer value. </p> 1.278 + 1.279 +</div> 1.280 +</div> 1.281 +<a id="a6a67e255e460acb58f802067b3ff5fd5"></a> 1.282 +<h2 class="memtitle"><span class="permalink"><a href="#a6a67e255e460acb58f802067b3ff5fd5">◆ </a></span>read_func</h2> 1.283 + 1.284 +<div class="memitem"> 1.285 +<div class="memproto"> 1.286 + <table class="memname"> 1.287 + <tr> 1.288 + <td class="memname">typedef size_t(* read_func) (void *, size_t, size_t, void *)</td> 1.289 + </tr> 1.290 + </table> 1.291 +</div><div class="memdoc"> 1.292 + 1.293 +<p>Function pointer to a read function. </p> 1.294 +<p>The signature of the read function shall be compatible to the signature of standard <code>fread</code>, though it may use arbitrary data types for source and destination.</p> 1.295 +<p>The arguments shall contain (in ascending order): a pointer to the destination, the length of one element, the element count and a pointer to the source. </p> 1.296 + 1.297 +</div> 1.298 +</div> 1.299 +<a id="ad2b370c2809914c8b7fedab163c266b3"></a> 1.300 +<h2 class="memtitle"><span class="permalink"><a href="#ad2b370c2809914c8b7fedab163c266b3">◆ </a></span>ucx_destructor</h2> 1.301 + 1.302 +<div class="memitem"> 1.303 +<div class="memproto"> 1.304 + <table class="memname"> 1.305 + <tr> 1.306 + <td class="memname">typedef void(* ucx_destructor) (void *)</td> 1.307 + </tr> 1.308 + </table> 1.309 +</div><div class="memdoc"> 1.310 + 1.311 +<p>A function pointer to a destructor function. </p> 1.312 +<dl class="section see"><dt>See also</dt><dd>ucx_mempool_setdestr() </dd> 1.313 +<dd> 1.314 +ucx_mempool_regdestr() </dd></dl> 1.315 + 1.316 +</div> 1.317 +</div> 1.318 +<a id="a989b3f0fa4d307d278378fde435641ed"></a> 1.319 +<h2 class="memtitle"><span class="permalink"><a href="#a989b3f0fa4d307d278378fde435641ed">◆ </a></span>write_func</h2> 1.320 + 1.321 +<div class="memitem"> 1.322 +<div class="memproto"> 1.323 + <table class="memname"> 1.324 + <tr> 1.325 + <td class="memname">typedef size_t(* write_func) (const void *, size_t, size_t, void *)</td> 1.326 + </tr> 1.327 + </table> 1.328 +</div><div class="memdoc"> 1.329 + 1.330 +<p>Function pointer to a write function. </p> 1.331 +<p>The signature of the write function shall be compatible to the signature of standard <code>fwrite</code>, though it may use arbitrary data types for source and destination.</p> 1.332 +<p>The arguments shall contain (in ascending order): a pointer to the source, the length of one element, the element count and a pointer to the destination. </p> 1.333 + 1.334 +</div> 1.335 +</div> 1.336 +<h2 class="groupheader">Function Documentation</h2> 1.337 +<a id="a6637171cc0ec097b297f731a3036dd3b"></a> 1.338 +<h2 class="memtitle"><span class="permalink"><a href="#a6637171cc0ec097b297f731a3036dd3b">◆ </a></span>ucx_szmul_impl()</h2> 1.339 + 1.340 +<div class="memitem"> 1.341 +<div class="memproto"> 1.342 + <table class="memname"> 1.343 + <tr> 1.344 + <td class="memname">int ucx_szmul_impl </td> 1.345 + <td>(</td> 1.346 + <td class="paramtype">size_t </td> 1.347 + <td class="paramname"><em>a</em>, </td> 1.348 + </tr> 1.349 + <tr> 1.350 + <td class="paramkey"></td> 1.351 + <td></td> 1.352 + <td class="paramtype">size_t </td> 1.353 + <td class="paramname"><em>b</em>, </td> 1.354 + </tr> 1.355 + <tr> 1.356 + <td class="paramkey"></td> 1.357 + <td></td> 1.358 + <td class="paramtype">size_t * </td> 1.359 + <td class="paramname"><em>result</em> </td> 1.360 + </tr> 1.361 + <tr> 1.362 + <td></td> 1.363 + <td>)</td> 1.364 + <td></td><td></td> 1.365 + </tr> 1.366 + </table> 1.367 +</div><div class="memdoc"> 1.368 + 1.369 +<p>Performs a multiplication of size_t values and checks for overflow. </p> 1.370 +<p>This is a custom implementation in case there is no compiler builtin available.</p> 1.371 +<dl class="params"><dt>Parameters</dt><dd> 1.372 + <table class="params"> 1.373 + <tr><td class="paramname">a</td><td>first operand </td></tr> 1.374 + <tr><td class="paramname">b</td><td>second operand </td></tr> 1.375 + <tr><td class="paramname">result</td><td>a pointer to a size_t where the result should be stored </td></tr> 1.376 + </table> 1.377 + </dd> 1.378 +</dl> 1.379 +<dl class="section return"><dt>Returns</dt><dd>zero, if no overflow occurred and the result is correct, non-zero otherwise </dd></dl> 1.380 + 1.381 +</div> 1.382 +</div> 1.383 +</div><!-- contents --> 1.384 +<!-- start footer part --> 1.385 +<hr class="footer"/><address class="footer"><small> 1.386 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 1.387 +<img class="footer" src="doxygen.png" alt="doxygen"/> 1.388 +</a> 1.8.13 1.389 +</small></address> 1.390 +</body> 1.391 +</html>