<!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"/> <title>ucommon: ucommon/platform.h File Reference</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="navtree.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="navtree.js"></script> <script type="text/javascript" src="resize.js"></script> <script type="text/javascript"> $(document).ready(initResizable); </script> <link href="doxygen.css" rel="stylesheet" type="text/css"/> </head> <body> <!-- Generated by Doxygen 1.7.3 --> <div id="top"> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">ucommon</div> </td> </tr> </tbody> </table> </div> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</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> <li><a href="examples.html"><span>Examples</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> <div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="nav-tree"> <div id="nav-tree-contents"> </div> </div> <div id="splitbar" style="-moz-user-select:none;" class="ui-resizable-handle"> </div> </div> <script type="text/javascript"> initNavTree('a00193.html',''); </script> <div id="doc-content"> <div class="header"> <div class="summary"> <a href="#namespaces">Namespaces</a> | <a href="#define-members">Defines</a> | <a href="#typedef-members">Typedefs</a> | <a href="#func-members">Functions</a> </div> <div class="headertitle"> <h1>ucommon/platform.h File Reference</h1> </div> </div> <div class="contents"> <p>Various miscellaneous platform specific headers and defines. <a href="#_details">More...</a></p> <div class="textblock"><code>#include <pthread.h></code><br/> <code>#include <signal.h></code><br/> <code>#include <sys/stat.h></code><br/> <code>#include <sys/types.h></code><br/> <code>#include <stdint.h></code><br/> <code>#include <unistd.h></code><br/> <code>#include <stdlib.h></code><br/> <code>#include <errno.h></code><br/> <code>#include <assert.h></code><br/> </div><div class="textblock"><div class="dynheader"> Include dependency graph for platform.h:</div> <div class="dyncontent"> <div class="center"><img src="a00252.png" border="0" usemap="#ucommon_2platform_8h" alt=""/></div> <map name="ucommon_2platform_8h" id="ucommon_2platform_8h"> <area shape="rect" id="node3" href="a00239_source.html" title="pthread.h" alt="" coords="713,80,825,107"/><area shape="rect" id="node39" href="a00244_source.html" title="signal.h" alt="" coords="2108,80,2209,107"/><area shape="rect" id="node66" href="a00245_source.html" title="stdint.h" alt="" coords="2988,80,3089,107"/><area shape="rect" id="node72" href="a00246_source.html" title="unistd.h" alt="" coords="4271,155,4372,181"/><area shape="rect" id="node85" href="a00248_source.html" title="stdlib.h" alt="" coords="3673,80,3775,107"/><area shape="rect" id="node98" href="a00250_source.html" title="errno.h" alt="" coords="3239,80,3329,107"/><area shape="rect" id="node103" href="a00251_source.html" title="assert.h" alt="" coords="3113,80,3215,107"/><area shape="rect" id="node5" href="a00240_source.html" title="features.h" alt="" coords="164,155,287,181"/><area shape="rect" id="node11" href="a00241_source.html" title="endian.h" alt="" coords="511,155,612,181"/><area shape="rect" id="node19" href="a00242_source.html" title="sched.h" alt="" coords="636,155,727,181"/><area shape="rect" id="node26" href="a00243_source.html" title="time.h" alt="" coords="1712,229,1795,256"/><area shape="rect" id="node83" href="a00247_source.html" title="getopt.h" alt="" coords="4604,229,4705,256"/><area shape="rect" id="node94" href="a00249_source.html" title="alloca.h" alt="" coords="3673,155,3775,181"/></map> </div> </div> <p><a href="a00193_source.html">Go to the source code of this file.</a></p> <table class="memberdecls"> <tr><td colspan="2"><h2><a name="namespaces"></a> Namespaces</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html">ucc</a></td></tr> <p><tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Common namespace for all ucommon objects. </p> <br/></td></tr> </p> <tr><td colspan="2"><h2><a name="define-members"></a> Defines</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad10ef148ba8327bd530fc6c32c1e181c"></a><!-- doxytag: member="platform.h::__EXPORT" ref="ad10ef148ba8327bd530fc6c32c1e181c" args="" --> #define </td><td class="memItemRight" valign="bottom"><b>__EXPORT</b></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ed18cba305b6aa05dbdacdada3db4df"></a><!-- doxytag: member="platform.h::__LOCAL" ref="a5ed18cba305b6aa05dbdacdada3db4df" args="" --> #define </td><td class="memItemRight" valign="bottom"><b>__LOCAL</b></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aca890f63cdea692ad06a46c1745b9601"></a><!-- doxytag: member="platform.h::__MALLOC" ref="aca890f63cdea692ad06a46c1745b9601" args="" --> #define </td><td class="memItemRight" valign="bottom"><b>__MALLOC</b></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4aee2a17d54e97aad863f89aeec81370"></a><!-- doxytag: member="platform.h::__PRINTF" ref="a4aee2a17d54e97aad863f89aeec81370" args="(x, y)" --> #define </td><td class="memItemRight" valign="bottom"><b>__PRINTF</b>(x, y)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ea98d56fe3aecbf554d3feaccf6ece9"></a><!-- doxytag: member="platform.h::__SCANF" ref="a8ea98d56fe3aecbf554d3feaccf6ece9" args="(x, y)" --> #define </td><td class="memItemRight" valign="bottom"><b>__SCANF</b>(x, y)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad44924736167f82a10ae2891fc98a608"></a><!-- doxytag: member="platform.h::_POSIX_PTHREAD_SEMANTICS" ref="ad44924736167f82a10ae2891fc98a608" args="" --> #define </td><td class="memItemRight" valign="bottom"><b>_POSIX_PTHREAD_SEMANTICS</b></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac15da069257627fefd71d875d538b73d"></a><!-- doxytag: member="platform.h::_REENTRANT" ref="ac15da069257627fefd71d875d538b73d" args="" --> #define </td><td class="memItemRight" valign="bottom"><b>_REENTRANT</b>   1</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a443747bad6a2c99b390ad3b41496e860"></a><!-- doxytag: member="platform.h::_THREADSAFE" ref="a443747bad6a2c99b390ad3b41496e860" args="" --> #define </td><td class="memItemRight" valign="bottom"><b>_THREADSAFE</b>   1</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a24d2d71eea325f5251ed56373cc83efd"></a><!-- doxytag: member="platform.h::_UCOMMON_EXTENDED_" ref="a24d2d71eea325f5251ed56373cc83efd" args="" --> #define </td><td class="memItemRight" valign="bottom"><b>_UCOMMON_EXTENDED_</b></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed2dc2ccf257c8305725af7d5fc471e5"></a><!-- doxytag: member="platform.h::crit" ref="aed2dc2ccf257c8305725af7d5fc471e5" args="(x, text)" --> #define </td><td class="memItemRight" valign="bottom"><b>crit</b>(x, text)   if(!(x)) cpr_runtime_error(text)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28886d59fbdc2dccd82cc4887e967d0d"></a><!-- doxytag: member="platform.h::END_NAMESPACE" ref="a28886d59fbdc2dccd82cc4887e967d0d" args="" --> #define </td><td class="memItemRight" valign="bottom"><b>END_NAMESPACE</b>   }</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fdc7facea201bfce4ad308105f88d0c"></a><!-- doxytag: member="platform.h::INVALID_HANDLE_VALUE" ref="a5fdc7facea201bfce4ad308105f88d0c" args="" --> #define </td><td class="memItemRight" valign="bottom"><b>INVALID_HANDLE_VALUE</b>   -1</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a26769957ec1a2beaf223f33b66ee64ab"></a><!-- doxytag: member="platform.h::INVALID_SOCKET" ref="a26769957ec1a2beaf223f33b66ee64ab" args="" --> #define </td><td class="memItemRight" valign="bottom"><b>INVALID_SOCKET</b>   -1</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a453fa17a6ece9c8d96c6312c2e333dd9"></a><!-- doxytag: member="platform.h::NAMESPACE_UCOMMON" ref="a453fa17a6ece9c8d96c6312c2e333dd9" args="" --> #define </td><td class="memItemRight" valign="bottom"><b>NAMESPACE_UCOMMON</b>   namespace ucc {</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8de3ed741dadc9c979a4ff17c0a9116e"></a><!-- doxytag: member="platform.h::NDEBUG" ref="a8de3ed741dadc9c979a4ff17c0a9116e" args="" --> #define </td><td class="memItemRight" valign="bottom"><b>NDEBUG</b></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b0e54f1ca1e0a9ce1cfd20e7a22b8f9"></a><!-- doxytag: member="platform.h::PROGRAM_EXIT" ref="a8b0e54f1ca1e0a9ce1cfd20e7a22b8f9" args="(code)" --> #define </td><td class="memItemRight" valign="bottom"><b>PROGRAM_EXIT</b>(code)   return code</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef5ca8866cc3f53c0801c614c1fecfe8"></a><!-- doxytag: member="platform.h::PROGRAM_MAIN" ref="aef5ca8866cc3f53c0801c614c1fecfe8" args="(argc, argv)" --> #define </td><td class="memItemRight" valign="bottom"><b>PROGRAM_MAIN</b>(argc, argv)   extern "C" int main(int argc, char **argv)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a29f642485be9a0f4c56373bc2f8db1dd"></a><!-- doxytag: member="platform.h::SERVICE_MAIN" ref="a29f642485be9a0f4c56373bc2f8db1dd" args="(id, argc, argv)" --> #define </td><td class="memItemRight" valign="bottom"><b>SERVICE_MAIN</b>(id, argc, argv)   void service_##id(int argc, char **argv)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe6604c42dad18d6d9ec76a270ef850d"></a><!-- doxytag: member="platform.h::UCOMMON_ABI" ref="abe6604c42dad18d6d9ec76a270ef850d" args="" --> #define </td><td class="memItemRight" valign="bottom"><b>UCOMMON_ABI</b>   4</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6e4fce0fa13b36f8b31f4d56111b0a44"></a><!-- doxytag: member="platform.h::UCOMMON_NAMESPACE" ref="a6e4fce0fa13b36f8b31f4d56111b0a44" args="" --> #define </td><td class="memItemRight" valign="bottom"><b>UCOMMON_NAMESPACE</b>   ucc</td></tr> <tr><td colspan="2"><h2><a name="typedef-members"></a> Typedefs</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a24d43e2415633d5eb6ab3ea29733cf49"></a><!-- doxytag: member="platform.h::cpr_service_t" ref="a24d43e2415633d5eb6ab3ea29733cf49" args=")(int argc, char **argv)" --> typedef void(* </td><td class="memItemRight" valign="bottom"><b>cpr_service_t</b> )(int argc, char **argv)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1540dca57d43779772b9c10fc2f17f83"></a><!-- doxytag: member="platform.h::fd_t" ref="a1540dca57d43779772b9c10fc2f17f83" args="" --> typedef int </td><td class="memItemRight" valign="bottom"><b>fd_t</b></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8bcc2ce32e3b6f7502f4e3bf46b342ba"></a><!-- doxytag: member="platform.h::Integer" ref="a8bcc2ce32e3b6f7502f4e3bf46b342ba" args="" --> typedef long </td><td class="memItemRight" valign="bottom"><b>Integer</b></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a445a5f0e2a34c9d97d69a3c2d1957907"></a><!-- doxytag: member="platform.h::Real" ref="a445a5f0e2a34c9d97d69a3c2d1957907" args="" --> typedef double </td><td class="memItemRight" valign="bottom"><b>Real</b></td></tr> <tr><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#a564498016effaee1f3384e07b7ced24f">sighandler_t</a> )(int)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Convenient typedef for signal handlers. <a href="#a564498016effaee1f3384e07b7ced24f"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a30353f381f5fccbb956eea1f3a110b6c"></a><!-- doxytag: member="platform.h::socket_t" ref="a30353f381f5fccbb956eea1f3a110b6c" args="" --> typedef int </td><td class="memItemRight" valign="bottom"><b>socket_t</b></td></tr> <tr><td class="memItemLeft" align="right" valign="top">typedef unsigned long </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Typedef for millisecond timer values. <a href="#af412159e5cef839836a5e7b19ee75d1c"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7161af27b4528120d5a94d59db0352fb"></a><!-- doxytag: member="platform.h::Unsigned" ref="a7161af27b4528120d5a94d59db0352fb" args="" --> typedef unsigned long </td><td class="memItemRight" valign="bottom"><b>Unsigned</b></td></tr> <tr><td colspan="2"><h2><a name="func-members"></a> Functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#aec6d33ffff1d527a4f54ec7d94787a27">cpr_memalloc</a> (size_t size)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Portable memory allocation helper function. <a href="#aec6d33ffff1d527a4f54ec7d94787a27"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#a4f34bef5a6063f977cf3b41e6d7db116">cpr_memassign</a> (size_t size, caddr_t address, size_t known)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Portable memory placement helper function. <a href="#a4f34bef5a6063f977cf3b41e6d7db116"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#a4880da985609d497e8ddb71652ca1e33">cpr_memswap</a> (void *mem1, void *mem2, size_t size)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Portable swap code. <a href="#a4880da985609d497e8ddb71652ca1e33"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#a873d0643afa826c6af4071f189005015">cpr_runtime_error</a> (const char *text)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Function to handle runtime errors. <a href="#a873d0643afa826c6af4071f189005015"></a><br/></td></tr> <tr><td class="memTemplParams" colspan="2">template<class T > </td></tr> <tr><td class="memTemplItemLeft" align="right" valign="top">T * </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#a5fc126f9a4406cb2d0d054488cf00809">init</a> (T *memory)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Template function to initialize memory by invoking default constructor. <a href="#a5fc126f9a4406cb2d0d054488cf00809"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc9e88b75cd2a5f1031bfd07840049cc"></a><!-- doxytag: member="platform.h::lsb_getlong" ref="afc9e88b75cd2a5f1031bfd07840049cc" args="(uint8_t *b)" --> uint32_t </td><td class="memItemRight" valign="bottom"><b>lsb_getlong</b> (uint8_t *b)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8790a4aef4c019a4047f1448180522ee"></a><!-- doxytag: member="platform.h::lsb_getshort" ref="a8790a4aef4c019a4047f1448180522ee" args="(uint8_t *b)" --> uint16_t </td><td class="memItemRight" valign="bottom"><b>lsb_getshort</b> (uint8_t *b)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a458254936d4ad346438ca2d04e03c94c"></a><!-- doxytag: member="platform.h::lsb_setlong" ref="a458254936d4ad346438ca2d04e03c94c" args="(uint8_t *b, uint32_t v)" --> void </td><td class="memItemRight" valign="bottom"><b>lsb_setlong</b> (uint8_t *b, uint32_t v)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8aa5331fca6fa075085f526eb51d4bc7"></a><!-- doxytag: member="platform.h::lsb_setshort" ref="a8aa5331fca6fa075085f526eb51d4bc7" args="(uint8_t *b, uint16_t v)" --> void </td><td class="memItemRight" valign="bottom"><b>lsb_setshort</b> (uint8_t *b, uint16_t v)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5489c1da20ad993afcbd7a53dbb61ac1"></a><!-- doxytag: member="platform.h::msb_getlong" ref="a5489c1da20ad993afcbd7a53dbb61ac1" args="(uint8_t *b)" --> uint32_t </td><td class="memItemRight" valign="bottom"><b>msb_getlong</b> (uint8_t *b)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6190a908026c9c8c29556261da527bae"></a><!-- doxytag: member="platform.h::msb_getshort" ref="a6190a908026c9c8c29556261da527bae" args="(uint8_t *b)" --> uint16_t </td><td class="memItemRight" valign="bottom"><b>msb_getshort</b> (uint8_t *b)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad07a04ca9c73478552b61bb4e70f473"></a><!-- doxytag: member="platform.h::msb_setlong" ref="aad07a04ca9c73478552b61bb4e70f473" args="(uint8_t *b, uint32_t v)" --> void </td><td class="memItemRight" valign="bottom"><b>msb_setlong</b> (uint8_t *b, uint32_t v)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4dfb426b2a9be9a8c777ff91e42d6c1d"></a><!-- doxytag: member="platform.h::msb_setshort" ref="a4dfb426b2a9be9a8c777ff91e42d6c1d" args="(uint8_t *b, uint16_t v)" --> void </td><td class="memItemRight" valign="bottom"><b>msb_setshort</b> (uint8_t *b, uint16_t v)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#a51dc097f57d77981bcf963b87423e85f">operator new</a> (size_t size, caddr_t address, size_t known)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">A placement new operator where we know the allocated size. <a href="#a51dc097f57d77981bcf963b87423e85f"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#a2c7ac8dd4bafcd4e8fc240be94321b7a">operator new</a> (size_t size, size_t extra)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Overdraft new to allocate extra memory for object from heap. <a href="#a2c7ac8dd4bafcd4e8fc240be94321b7a"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#accc8c72bfa1e4436b32153e649479690">operator new</a> (size_t size, caddr_t address)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">A placement new operator where we assume the size of memory is good. <a href="#accc8c72bfa1e4436b32153e649479690"></a><br/></td></tr> </table> <hr/><a name="_details"></a><h2>Detailed Description</h2> <div class="textblock"><p>Various miscellaneous platform specific headers and defines. </p> <p>This is used to support ucommon on different platforms. The ucommon library assumes at least a real posix threading library is present or will build thread support native on Microsoft Windows legacy platform. This header also deals with issues related to common base types. </p> <p>Definition in file <a class="el" href="a00193_source.html">platform.h</a>.</p> </div><hr/><h2>Typedef Documentation</h2> <a class="anchor" id="a564498016effaee1f3384e07b7ced24f"></a><!-- doxytag: member="platform.h::sighandler_t" ref="a564498016effaee1f3384e07b7ced24f" args=")(int)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void(* <a class="el" href="a00193.html#a564498016effaee1f3384e07b7ced24f">sighandler_t</a>)(int)</td> </tr> </table> </div> <div class="memdoc"> <p>Convenient typedef for signal handlers. </p> <p>Definition at line <a class="el" href="a00193_source.html#l00304">304</a> of file <a class="el" href="a00193_source.html">platform.h</a>.</p> </div> </div> <a class="anchor" id="af412159e5cef839836a5e7b19ee75d1c"></a><!-- doxytag: member="platform.h::timeout_t" ref="af412159e5cef839836a5e7b19ee75d1c" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef unsigned long <a class="el" href="a00193.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a></td> </tr> </table> </div> <div class="memdoc"> <p>Typedef for millisecond timer values. </p> <p>Definition at line <a class="el" href="a00193_source.html#l00306">306</a> of file <a class="el" href="a00193_source.html">platform.h</a>.</p> </div> </div> <hr/><h2>Function Documentation</h2> <a class="anchor" id="aec6d33ffff1d527a4f54ec7d94787a27"></a><!-- doxytag: member="platform.h::cpr_memalloc" ref="aec6d33ffff1d527a4f54ec7d94787a27" args="(size_t size)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void* cpr_memalloc </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>size</em></td><td>)</td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Portable memory allocation helper function. </p> <p>Handles out of heap error as a runtime error. </p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">size</td><td>of memory block to allocate from heap. </td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>memory address of allocated heap space. </dd></dl> </div> </div> <a class="anchor" id="a4f34bef5a6063f977cf3b41e6d7db116"></a><!-- doxytag: member="platform.h::cpr_memassign" ref="a4f34bef5a6063f977cf3b41e6d7db116" args="(size_t size, caddr_t address, size_t known)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void* cpr_memassign </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>size</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">caddr_t </td> <td class="paramname"><em>address</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>known</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Portable memory placement helper function. </p> <p>This is used to process "placement" new operators where a new object is constructed over a pre-allocated area of memory. This handles invalid values through runtime error. </p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">size</td><td>of object being constructed. </td></tr> <tr><td class="paramname">address</td><td>where the object is being placed. </td></tr> <tr><td class="paramname">known</td><td>size of the location we are constructing the object in. </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="a4880da985609d497e8ddb71652ca1e33"></a><!-- doxytag: member="platform.h::cpr_memswap" ref="a4880da985609d497e8ddb71652ca1e33" args="(void *mem1, void *mem2, size_t size)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cpr_memswap </td> <td>(</td> <td class="paramtype">void * </td> <td class="paramname"><em>mem1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void * </td> <td class="paramname"><em>mem2</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>size</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Portable swap code. </p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">mem1</td><td>to swap. </td></tr> <tr><td class="paramname">mem2</td><td>to swap. </td></tr> <tr><td class="paramname">size</td><td>of swap area. </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="a873d0643afa826c6af4071f189005015"></a><!-- doxytag: member="platform.h::cpr_runtime_error" ref="a873d0643afa826c6af4071f189005015" args="(const char *text)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cpr_runtime_error </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>text</em></td><td>)</td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Function to handle runtime errors. </p> <p>When using the standard C library, runtime errors are handled by a simple abort. When using the stdc++ library with stdexcept, then std::runtime_error will be thrown. </p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">text</td><td>of runtime error. </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="a5fc126f9a4406cb2d0d054488cf00809"></a><!-- doxytag: member="platform.h::init" ref="a5fc126f9a4406cb2d0d054488cf00809" args="(T *memory)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T > </div> <table class="memname"> <tr> <td class="memname">T* init </td> <td>(</td> <td class="paramtype">T * </td> <td class="paramname"><em>memory</em></td><td>)</td> <td><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Template function to initialize memory by invoking default constructor. </p> <p>If NULL is passed, then NULL is returned without any constructor called. </p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">memory</td><td>to initialize. </td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>memory initialized. </dd></dl> <p>Definition at line <a class="el" href="a00193_source.html#l00532">532</a> of file <a class="el" href="a00193_source.html">platform.h</a>.</p> </div> </div> <a class="anchor" id="a51dc097f57d77981bcf963b87423e85f"></a><!-- doxytag: member="platform.h::operator new" ref="a51dc097f57d77981bcf963b87423e85f" args="(size_t size, caddr_t address, size_t known)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void* operator new </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>size</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">caddr_t </td> <td class="paramname"><em>address</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>known</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>A placement new operator where we know the allocated size. </p> <p>We find out how much memory is needed by the new and can prevent the object from exceeding the available space we are placing the object. </p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">size</td><td>of memory needed for object. </td></tr> <tr><td class="paramname">address</td><td>where to place object. </td></tr> <tr><td class="paramname">known</td><td>size of location we are placing object. </td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>memory we placed object. </dd></dl> <p>Definition at line <a class="el" href="a00193_source.html#l00473">473</a> of file <a class="el" href="a00193_source.html">platform.h</a>.</p> <p><div class="dynheader"> Here is the call graph for this function:</div> <div class="dyncontent"> <div class="center"><img src="a00193_a51dc097f57d77981bcf963b87423e85f_cgraph.png" border="0" usemap="#a00193_a51dc097f57d77981bcf963b87423e85f_cgraph" alt=""/></div> <map name="a00193_a51dc097f57d77981bcf963b87423e85f_cgraph" id="a00193_a51dc097f57d77981bcf963b87423e85f_cgraph"> <area shape="rect" id="node3" href="a00193.html#a4f34bef5a6063f977cf3b41e6d7db116" title="Portable memory placement helper function." alt="" coords="197,5,349,32"/></map> </div> </p> </div> </div> <a class="anchor" id="a2c7ac8dd4bafcd4e8fc240be94321b7a"></a><!-- doxytag: member="platform.h::operator new" ref="a2c7ac8dd4bafcd4e8fc240be94321b7a" args="(size_t size, size_t extra)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void* operator new </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>size</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>extra</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Overdraft new to allocate extra memory for object from heap. </p> <p>This is used for objects that must have a known class size but store extra data behind the class. The last member might be an unsized or 0 element array, and the actual size needed from the heap is hence not the size of the class itself but is known by the routine allocating the object. </p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">size</td><td>of object. </td></tr> <tr><td class="paramname">extra</td><td>heap space needed for data. </td></tr> </table> </dd> </dl> <p>Definition at line <a class="el" href="a00193_source.html#l00449">449</a> of file <a class="el" href="a00193_source.html">platform.h</a>.</p> <p><div class="dynheader"> Here is the call graph for this function:</div> <div class="dyncontent"> <div class="center"><img src="a00193_a2c7ac8dd4bafcd4e8fc240be94321b7a_cgraph.png" border="0" usemap="#a00193_a2c7ac8dd4bafcd4e8fc240be94321b7a_cgraph" alt=""/></div> <map name="a00193_a2c7ac8dd4bafcd4e8fc240be94321b7a_cgraph" id="a00193_a2c7ac8dd4bafcd4e8fc240be94321b7a_cgraph"> <area shape="rect" id="node3" href="a00193.html#aec6d33ffff1d527a4f54ec7d94787a27" title="Portable memory allocation helper function." alt="" coords="199,5,340,32"/></map> </div> </p> </div> </div> <a class="anchor" id="accc8c72bfa1e4436b32153e649479690"></a><!-- doxytag: member="platform.h::operator new" ref="accc8c72bfa1e4436b32153e649479690" args="(size_t size, caddr_t address)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void* operator new </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>size</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">caddr_t </td> <td class="paramname"><em>address</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>A placement new operator where we assume the size of memory is good. </p> <p>We construct the object at a specified place in memory which we assume is valid for our needs. </p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">size</td><td>of memory needed for object. </td></tr> <tr><td class="paramname">address</td><td>where to place object. </td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>memory we placed object. </dd></dl> <p>Definition at line <a class="el" href="a00193_source.html#l00460">460</a> of file <a class="el" href="a00193_source.html">platform.h</a>.</p> <p><div class="dynheader"> Here is the call graph for this function:</div> <div class="dyncontent"> <div class="center"><img src="a00193_accc8c72bfa1e4436b32153e649479690_cgraph.png" border="0" usemap="#a00193_accc8c72bfa1e4436b32153e649479690_cgraph" alt=""/></div> <map name="a00193_accc8c72bfa1e4436b32153e649479690_cgraph" id="a00193_accc8c72bfa1e4436b32153e649479690_cgraph"> <area shape="rect" id="node3" href="a00193.html#a4f34bef5a6063f977cf3b41e6d7db116" title="Portable memory placement helper function." alt="" coords="197,5,349,32"/></map> </div> </p> </div> </div> </div> </div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="a00193.html">platform.h</a> </li> <li class="footer">Generated on Wed Apr 13 2011 22:39:47 for ucommon by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.3 </li> </ul> </div> </body> </html>