Sophie

Sophie

distrib > Mandriva > current > i586 > media > main-updates > by-pkgid > ed376d6842ea322c25405e7c23b3bc12 > files > 665

libcommoncpp-devel-1.8.0-5.1mdv2010.1.i586.rpm

<!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>GNU CommonC++: thread.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.3 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</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 class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
    </ul>
  </div>
<h1>thread.h</h1><a href="thread_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// Copyright (C) 1999-2005 Open Source Telecom Corporation.</span>
<a name="l00002"></a>00002 <span class="comment">// Copyright (C) 2006-2008 David Sugar, Tycho Softworks.</span>
<a name="l00003"></a>00003 <span class="comment">//</span>
<a name="l00004"></a>00004 <span class="comment">// This program is free software; you can redistribute it and/or modify</span>
<a name="l00005"></a>00005 <span class="comment">// it under the terms of the GNU General Public License as published by</span>
<a name="l00006"></a>00006 <span class="comment">// the Free Software Foundation; either version 2 of the License, or</span>
<a name="l00007"></a>00007 <span class="comment">// (at your option) any later version.</span>
<a name="l00008"></a>00008 <span class="comment">//</span>
<a name="l00009"></a>00009 <span class="comment">// This program is distributed in the hope that it will be useful,</span>
<a name="l00010"></a>00010 <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00011"></a>00011 <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<a name="l00012"></a>00012 <span class="comment">// GNU General Public License for more details.</span>
<a name="l00013"></a>00013 <span class="comment">//</span>
<a name="l00014"></a>00014 <span class="comment">// You should have received a copy of the GNU General Public License</span>
<a name="l00015"></a>00015 <span class="comment">// along with this program; if not, write to the Free Software</span>
<a name="l00016"></a>00016 <span class="comment">// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</span>
<a name="l00017"></a>00017 <span class="comment">//</span>
<a name="l00018"></a>00018 <span class="comment">// As a special exception, you may use this file as part of a free software</span>
<a name="l00019"></a>00019 <span class="comment">// library without restriction.  Specifically, if other files instantiate</span>
<a name="l00020"></a>00020 <span class="comment">// templates or use macros or inline functions from this file, or you compile</span>
<a name="l00021"></a>00021 <span class="comment">// this file and link it with other files to produce an executable, this</span>
<a name="l00022"></a>00022 <span class="comment">// file does not by itself cause the resulting executable to be covered by</span>
<a name="l00023"></a>00023 <span class="comment">// the GNU General Public License.  This exception does not however</span>
<a name="l00024"></a>00024 <span class="comment">// invalidate any other reasons why the executable file might be covered by</span>
<a name="l00025"></a>00025 <span class="comment">// the GNU General Public License.</span>
<a name="l00026"></a>00026 <span class="comment">//</span>
<a name="l00027"></a>00027 <span class="comment">// This exception applies only to the code released under the name GNU</span>
<a name="l00028"></a>00028 <span class="comment">// Common C++.  If you copy code from other releases into a copy of GNU</span>
<a name="l00029"></a>00029 <span class="comment">// Common C++, as the General Public License permits, the exception does</span>
<a name="l00030"></a>00030 <span class="comment">// not apply to the code that you add in this way.  To avoid misleading</span>
<a name="l00031"></a>00031 <span class="comment">// anyone as to the status of such modified files, you must delete</span>
<a name="l00032"></a>00032 <span class="comment">// this exception notice from them.</span>
<a name="l00033"></a>00033 <span class="comment">//</span>
<a name="l00034"></a>00034 <span class="comment">// If you write modifications of your own for GNU Common C++, it is your choice</span>
<a name="l00035"></a>00035 <span class="comment">// whether to permit this exception to apply to your modifications.</span>
<a name="l00036"></a>00036 <span class="comment">// If you do not wish that, delete this exception notice.</span>
<a name="l00037"></a>00037 <span class="comment">//</span>
<a name="l00038"></a>00038 
<a name="l00044"></a>00044 <span class="preprocessor">#ifndef CCXX_THREAD_H_</span>
<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define CCXX_THREAD_H_</span>
<a name="l00046"></a>00046 <span class="preprocessor"></span>
<a name="l00047"></a>00047 <span class="preprocessor">#include &lt;<a class="code" href="config_8h.html">cc++/config.h</a>&gt;</span>
<a name="l00048"></a>00048 
<a name="l00049"></a>00049 <span class="preprocessor">#ifndef CCXX_STRING_H_</span>
<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#include &lt;<a class="code" href="string_8h.html" title="Common C++ generic string class.">cc++/string.h</a>&gt;</span>
<a name="l00051"></a>00051 <span class="preprocessor">#endif</span>
<a name="l00052"></a>00052 <span class="preprocessor"></span>
<a name="l00053"></a>00053 <span class="preprocessor">#ifndef WIN32</span>
<a name="l00054"></a><a class="code" href="thread_8h.html#a9fc514088fa3739a1300ce30ca6585d5">00054</a> <span class="preprocessor"></span><span class="preprocessor">#define CCXX_POSIX</span>
<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#endif // !WIN32</span>
<a name="l00056"></a>00056 <span class="preprocessor"></span>
<a name="l00057"></a>00057 <span class="preprocessor">#include &lt;ctime&gt;</span>
<a name="l00058"></a>00058 
<a name="l00059"></a>00059 <span class="preprocessor">#ifndef WIN32</span>
<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#include &lt;pthread.h&gt;</span>
<a name="l00061"></a>00061 <span class="preprocessor">#endif // !WIN32</span>
<a name="l00062"></a>00062 <span class="preprocessor"></span>
<a name="l00063"></a>00063 <span class="preprocessor">#undef CCXX_USE_WIN32_ATOMIC</span>
<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#ifndef WIN32</span>
<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">#include &lt;time.h&gt;</span>
<a name="l00066"></a>00066 <span class="preprocessor">#include &lt;signal.h&gt;</span>
<a name="l00067"></a>00067 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
<a name="l00068"></a>00068 
<a name="l00069"></a>00069 <span class="preprocessor">#ifdef  _THR_UNIXWARE</span>
<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#undef  PTHREAD_MUTEXTYPE_RECURSIVE</span>
<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00072"></a>00072 <span class="preprocessor"></span>
<a name="l00073"></a><a class="code" href="thread_8h.html#a3f0d0226a694bf1e508e1b1c758e6ae6">00073</a> <span class="keyword">typedef</span> pthread_t       <a class="code" href="thread_8h.html#a3f0d0226a694bf1e508e1b1c758e6ae6">cctid_t</a>;
<a name="l00074"></a><a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">00074</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>   <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a>;
<a name="l00075"></a>00075 
<a name="l00076"></a>00076 <span class="comment">/*</span>
<a name="l00077"></a>00077 <span class="comment">#if defined(__CYGWIN32__)</span>
<a name="l00078"></a>00078 <span class="comment">__declspec(dllimport) long __stdcall InterlockedIncrement(long *);</span>
<a name="l00079"></a>00079 <span class="comment">__declspec(dllimport) long __stdcall InterlockedDecrement(long *);</span>
<a name="l00080"></a>00080 <span class="comment">__declspec(dllimport) long __stdcall InterlockedExchange(long *, long);</span>
<a name="l00081"></a>00081 <span class="comment">#define CCXX_USE_WIN32_ATOMIC 1</span>
<a name="l00082"></a>00082 <span class="comment">#endif</span>
<a name="l00083"></a>00083 <span class="comment">*/</span>
<a name="l00084"></a>00084 
<a name="l00085"></a>00085 <span class="preprocessor">#else // WIN32</span>
<a name="l00086"></a>00086 <span class="preprocessor"></span><span class="keyword">typedef</span> DWORD   <a class="code" href="thread_8h.html#a3f0d0226a694bf1e508e1b1c758e6ae6">cctid_t</a>;
<a name="l00087"></a>00087 <span class="keyword">typedef</span> DWORD   <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a>;
<a name="l00088"></a>00088 
<a name="l00089"></a>00089 <span class="preprocessor">#define MAX_SEM_VALUE   1000000</span>
<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#define CCXX_USE_WIN32_ATOMIC 1</span>
<a name="l00091"></a>00091 <span class="preprocessor"></span>
<a name="l00092"></a>00092 <span class="preprocessor">#endif // !WIN32</span>
<a name="l00093"></a>00093 <span class="preprocessor"></span>
<a name="l00094"></a>00094 <span class="preprocessor">#ifdef  HAVE_GCC_CXX_BITS_ATOMIC</span>
<a name="l00095"></a>00095 <span class="preprocessor"></span><span class="preprocessor">#include &lt;ios&gt;</span>
<a name="l00096"></a>00096 <span class="preprocessor">#endif</span>
<a name="l00097"></a>00097 <span class="preprocessor"></span>
<a name="l00098"></a>00098 <span class="preprocessor">#ifdef  CCXX_NAMESPACES</span>
<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="keyword">namespace </span>ost {
<a name="l00100"></a>00100 <span class="preprocessor">#ifdef __BORLANDC__</span>
<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor"># if __BORLANDC__ &gt;= 0x0560</span>
<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="keyword">using</span> std::time_t;
<a name="l00103"></a>00103 <span class="keyword">using</span> std::tm;
<a name="l00104"></a>00104 <span class="preprocessor"># endif</span>
<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00106"></a>00106 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00107"></a>00107 <span class="preprocessor"></span>
<a name="l00108"></a>00108 <span class="preprocessor">#ifdef  HAVE_GCC_CXX_BITS_ATOMIC</span>
<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="keyword">using namespace </span>__gnu_cxx;
<a name="l00110"></a>00110 <span class="preprocessor">#endif</span>
<a name="l00111"></a>00111 <span class="preprocessor"></span>
<a name="l00112"></a>00112 <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> Thread;
<a name="l00113"></a>00113 <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> ThreadKey;
<a name="l00114"></a>00114 
<a name="l00115"></a><a class="code" href="thread_8h.html#a74f2d4c747bce0b8f7f7c1f48e651876">00115</a> <span class="preprocessor">#define TIMEOUT_INF ~((timeout_t) 0)</span>
<a name="l00116"></a>00116 <span class="preprocessor"></span>
<a name="l00117"></a><a class="code" href="thread_8h.html#a9d5589bc014dcec626ff198d5c9370cd">00117</a> <span class="preprocessor">#define ENTER_CRITICAL  enterMutex();</span>
<a name="l00118"></a><a class="code" href="thread_8h.html#af1b76aeceb2370c5fcedee46f9cd3d09">00118</a> <span class="preprocessor"></span><span class="preprocessor">#define LEAVE_CRITICAL  leaveMutex();</span>
<a name="l00119"></a><a class="code" href="thread_8h.html#a61438c8055883ef92ffb09c68f70f049">00119</a> <span class="preprocessor"></span><span class="preprocessor">#define ENTER_DEFERRED  setCancel(cancelDeferred);</span>
<a name="l00120"></a><a class="code" href="thread_8h.html#ac6e53238dd0519d7c7117b2b40d4312b">00120</a> <span class="preprocessor"></span><span class="preprocessor">#define LEAVE_DEFERRED  setCancel(cancelImmediate);</span>
<a name="l00121"></a>00121 <span class="preprocessor"></span>
<a name="l00122"></a>00122 <span class="preprocessor">#ifndef WIN32</span>
<a name="l00123"></a>00123 <span class="preprocessor"></span><span class="comment">// These macros override common functions with thread-safe versions. In</span>
<a name="l00124"></a>00124 <span class="comment">// particular the common &quot;libc&quot; sleep() has problems since it normally</span>
<a name="l00125"></a>00125 <span class="comment">// uses SIGARLM (as actually defined by &quot;posix&quot;).  The pthread_delay and</span>
<a name="l00126"></a>00126 <span class="comment">// usleep found in libpthread are gaurenteed not to use SIGALRM and offer</span>
<a name="l00127"></a>00127 <span class="comment">// higher resolution.  psleep() is defined to call the old process sleep.</span>
<a name="l00128"></a>00128 
<a name="l00129"></a>00129 <span class="preprocessor">#undef  sleep</span>
<a name="l00130"></a><a class="code" href="thread_8h.html#a5e09ab8cba99b274fd420bd76f39b205">00130</a> <span class="preprocessor"></span><span class="preprocessor">#define psleep(x)       (sleep)(x)</span>
<a name="l00131"></a>00131 <span class="preprocessor"></span>
<a name="l00132"></a>00132 <span class="preprocessor">#ifdef  signal</span>
<a name="l00133"></a>00133 <span class="preprocessor"></span><span class="preprocessor">#undef  signal</span>
<a name="l00134"></a>00134 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00135"></a>00135 <span class="preprocessor"></span>
<a name="l00136"></a>00136 <span class="preprocessor">#endif // !WIN32</span>
<a name="l00137"></a>00137 <span class="preprocessor"></span>
<a name="l00138"></a>00138 <span class="preprocessor">#undef Yield</span>
<a name="l00139"></a>00139 <span class="preprocessor"></span>
<a name="l00140"></a>00140 <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> Conditional;
<a name="l00141"></a>00141 <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> Event;
<a name="l00142"></a>00142 
<a name="l00186"></a><a class="code" href="classost_1_1_mutex.html">00186</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_mutex.html" title="The Mutex class is used to protect a section of code so that at any given time only...">Mutex</a>
<a name="l00187"></a>00187 {
<a name="l00188"></a>00188 <span class="keyword">private</span>:
<a name="l00189"></a>00189         <span class="keyword">static</span> <span class="keywordtype">bool</span> _debug;
<a name="l00190"></a>00190         <a class="code" href="classost_1_1_string.html" title="This is a generic and portable string class.">String</a> _name;
<a name="l00191"></a>00191 <span class="preprocessor">#ifndef WIN32</span>
<a name="l00192"></a>00192 <span class="preprocessor"></span><span class="preprocessor">#ifndef PTHREAD_MUTEXTYPE_RECURSIVE</span>
<a name="l00193"></a>00193 <span class="preprocessor"></span>        <span class="keywordtype">int</span> <span class="keyword">volatile</span> _level;
<a name="l00194"></a>00194         Thread *<span class="keyword">volatile</span> _tid;
<a name="l00195"></a>00195 <span class="preprocessor">#endif</span>
<a name="l00196"></a>00196 <span class="preprocessor"></span>        <span class="comment">/*</span>
<a name="l00197"></a>00197 <span class="comment">         * Pthread mutex object.  This is protected rather than private</span>
<a name="l00198"></a>00198 <span class="comment">         * because some mixed mode pthread operations require a mutex as</span>
<a name="l00199"></a>00199 <span class="comment">         * well as their primary pthread object.  A good example of this</span>
<a name="l00200"></a>00200 <span class="comment">         * is the Event class, as waiting on a conditional object must be</span>
<a name="l00201"></a>00201 <span class="comment">         * associated with an accessable mutex.  An alternative would be</span>
<a name="l00202"></a>00202 <span class="comment">         * to make such classes &quot;friend&quot; classes of the Mutex.</span>
<a name="l00203"></a>00203 <span class="comment">         */</span>
<a name="l00204"></a>00204         pthread_mutex_t _mutex;
<a name="l00205"></a>00205 <span class="preprocessor">#else // WIN32</span>
<a name="l00206"></a>00206 <span class="preprocessor"></span>
<a name="l00207"></a>00207 <span class="preprocessor"># if defined(MUTEX_UNDERGROUND_WIN32_MUTEX) &amp;&amp; defined(MUTEX_UNDERGROUND_WIN32_CRITICALSECTION)</span>
<a name="l00208"></a>00208 <span class="preprocessor"></span><span class="preprocessor"># error &quot;Can&#39;t determine underground for Mutex&quot;</span>
<a name="l00209"></a>00209 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
<a name="l00210"></a>00210 <span class="preprocessor"></span>
<a name="l00211"></a>00211 <span class="preprocessor">#ifdef MUTEX_UNDERGROUND_WIN32_MUTEX</span>
<a name="l00212"></a>00212 <span class="preprocessor"></span>        <a class="code" href="serial_8h.html#a069bb8cb95b0528d5ce0304bb5561a40">HANDLE</a> _mutex;
<a name="l00213"></a>00213 <span class="preprocessor">#endif</span>
<a name="l00214"></a>00214 <span class="preprocessor"></span><span class="preprocessor">#ifdef MUTEX_UNDERGROUND_WIN32_CRITICALSECTION</span>
<a name="l00215"></a>00215 <span class="preprocessor"></span>        CRITICAL_SECTION _criticalSection;
<a name="l00216"></a>00216 <span class="preprocessor">#endif</span>
<a name="l00217"></a>00217 <span class="preprocessor"></span>
<a name="l00218"></a>00218 <span class="preprocessor">#endif // WIN32</span>
<a name="l00219"></a>00219 <span class="preprocessor"></span>
<a name="l00220"></a>00220 <span class="keyword">public</span>:
<a name="l00226"></a>00226         <a class="code" href="classost_1_1_mutex.html" title="The Mutex class is used to protect a section of code so that at any given time only...">Mutex</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name = NULL);
<a name="l00227"></a>00227 
<a name="l00233"></a>00233         <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_mutex.html" title="The Mutex class is used to protect a section of code so that at any given time only...">Mutex</a>();
<a name="l00234"></a>00234 
<a name="l00240"></a><a class="code" href="classost_1_1_mutex.html#a83b66f786e344b5192a3993d319aa735">00240</a>         <span class="keyword">static</span> <span class="keywordtype">void</span> setDebug(<span class="keywordtype">bool</span> mode)
<a name="l00241"></a>00241                 {_debug = mode;};
<a name="l00242"></a>00242 
<a name="l00248"></a><a class="code" href="classost_1_1_mutex.html#abed8b05b63f9cdd2c9ca1f92081b1a8a">00248</a>         <span class="keyword">inline</span> <span class="keywordtype">void</span> nameMutex(<span class="keyword">const</span> <span class="keywordtype">char</span> *name)
<a name="l00249"></a>00249                 {_name = name;};
<a name="l00250"></a>00250 
<a name="l00258"></a>00258         <span class="keywordtype">void</span> enterMutex(<span class="keywordtype">void</span>);
<a name="l00259"></a>00259 
<a name="l00263"></a><a class="code" href="classost_1_1_mutex.html#aecb516325583e432bf2bf7e4b565f6f6">00263</a>         <span class="keyword">inline</span> <span class="keywordtype">void</span> enter(<span class="keywordtype">void</span>)
<a name="l00264"></a>00264                 {enterMutex();};
<a name="l00265"></a>00265 
<a name="l00269"></a><a class="code" href="classost_1_1_mutex.html#ab6aaecac9c95d31a5862014d7f1afe73">00269</a>         <span class="keyword">inline</span> <span class="keywordtype">void</span> leave(<span class="keywordtype">void</span>)
<a name="l00270"></a>00270                 {leaveMutex();};
<a name="l00271"></a>00271 
<a name="l00277"></a><a class="code" href="classost_1_1_mutex.html#ac1ff5454b2c9b55790c4bf33f751704c">00277</a>         <span class="keyword">inline</span> <span class="keywordtype">bool</span> test(<span class="keywordtype">void</span>)
<a name="l00278"></a>00278                 {<span class="keywordflow">return</span> tryEnterMutex();};
<a name="l00279"></a>00279 
<a name="l00290"></a>00290         <span class="keywordtype">bool</span> tryEnterMutex(<span class="keywordtype">void</span>);
<a name="l00291"></a>00291 
<a name="l00302"></a>00302         <span class="keywordtype">void</span> leaveMutex(<span class="keywordtype">void</span>);
<a name="l00303"></a>00303 };
<a name="l00304"></a>00304 
<a name="l00328"></a><a class="code" href="classost_1_1_mutex_lock.html">00328</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_mutex_lock.html" title="The MutexLock class is used to protect a section of code so that at any given time...">MutexLock</a>
<a name="l00329"></a>00329 {
<a name="l00330"></a>00330 <span class="keyword">private</span>:
<a name="l00331"></a>00331         <a class="code" href="classost_1_1_mutex.html" title="The Mutex class is used to protect a section of code so that at any given time only...">Mutex</a>&amp; mutex;
<a name="l00332"></a>00332 <span class="keyword">public</span>:
<a name="l00338"></a><a class="code" href="classost_1_1_mutex_lock.html#aedb21cfad9b0f1200d055fb69efa2546">00338</a>         <a class="code" href="classost_1_1_mutex_lock.html" title="The MutexLock class is used to protect a section of code so that at any given time...">MutexLock</a>( <a class="code" href="classost_1_1_mutex.html" title="The Mutex class is used to protect a section of code so that at any given time only...">Mutex</a>&amp; _mutex ) : mutex( _mutex )
<a name="l00339"></a>00339                 { mutex.enterMutex(); }
<a name="l00340"></a>00340 
<a name="l00344"></a>00344         <span class="comment">// this should be not-virtual</span>
<a name="l00345"></a><a class="code" href="classost_1_1_mutex_lock.html#a58bba3406d89b40c8bd3e9ac389b920c">00345</a>         ~<a class="code" href="classost_1_1_mutex_lock.html" title="The MutexLock class is used to protect a section of code so that at any given time...">MutexLock</a>()
<a name="l00346"></a>00346                 { mutex.leaveMutex(); }
<a name="l00347"></a>00347 };
<a name="l00348"></a>00348 
<a name="l00357"></a><a class="code" href="classost_1_1_thread_lock.html">00357</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_thread_lock.html" title="The ThreadLock class impliments a thread rwlock for optimal reader performance on...">ThreadLock</a>
<a name="l00358"></a>00358 {
<a name="l00359"></a>00359 <span class="keyword">private</span>:
<a name="l00360"></a>00360 <span class="preprocessor">#ifdef HAVE_PTHREAD_RWLOCK</span>
<a name="l00361"></a>00361 <span class="preprocessor"></span>        pthread_rwlock_t _lock;
<a name="l00362"></a>00362 <span class="preprocessor">#else</span>
<a name="l00363"></a>00363 <span class="preprocessor"></span>        <a class="code" href="classost_1_1_mutex.html" title="The Mutex class is used to protect a section of code so that at any given time only...">Mutex</a> mutex;
<a name="l00364"></a>00364 <span class="preprocessor">#endif</span>
<a name="l00365"></a>00365 <span class="preprocessor"></span>
<a name="l00366"></a>00366 <span class="keyword">public</span>:
<a name="l00370"></a>00370         <a class="code" href="classost_1_1_thread_lock.html" title="The ThreadLock class impliments a thread rwlock for optimal reader performance on...">ThreadLock</a>();
<a name="l00371"></a>00371 
<a name="l00375"></a>00375         <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_thread_lock.html" title="The ThreadLock class impliments a thread rwlock for optimal reader performance on...">ThreadLock</a>();
<a name="l00376"></a>00376 
<a name="l00380"></a>00380         <span class="keywordtype">void</span> readLock(<span class="keywordtype">void</span>);
<a name="l00381"></a>00381 
<a name="l00385"></a>00385         <span class="keywordtype">void</span> writeLock(<span class="keywordtype">void</span>);
<a name="l00386"></a>00386 
<a name="l00392"></a>00392         <span class="keywordtype">bool</span> tryReadLock(<span class="keywordtype">void</span>);
<a name="l00393"></a>00393 
<a name="l00399"></a>00399         <span class="keywordtype">bool</span> tryWriteLock(<span class="keywordtype">void</span>);
<a name="l00400"></a>00400 
<a name="l00404"></a>00404         <span class="keywordtype">void</span> unlock(<span class="keywordtype">void</span>);
<a name="l00405"></a>00405 };
<a name="l00406"></a>00406 
<a name="l00427"></a><a class="code" href="classost_1_1_read_lock.html">00427</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_read_lock.html" title="The ReadLock class is used to protect a section of code through a ThreadLock for...">ReadLock</a>
<a name="l00428"></a>00428 {
<a name="l00429"></a>00429 <span class="keyword">private</span>:
<a name="l00430"></a>00430         <a class="code" href="classost_1_1_thread_lock.html" title="The ThreadLock class impliments a thread rwlock for optimal reader performance on...">ThreadLock</a>&amp; tl;
<a name="l00431"></a>00431 
<a name="l00432"></a>00432 <span class="keyword">public</span>:
<a name="l00438"></a><a class="code" href="classost_1_1_read_lock.html#a05b7c96baf6695c580871d0aaf01c149">00438</a>         <a class="code" href="classost_1_1_read_lock.html" title="The ReadLock class is used to protect a section of code through a ThreadLock for...">ReadLock</a>( <a class="code" href="classost_1_1_thread_lock.html" title="The ThreadLock class impliments a thread rwlock for optimal reader performance on...">ThreadLock</a>&amp; _tl ) : tl( _tl )
<a name="l00439"></a>00439                 { tl.readLock(); }
<a name="l00443"></a>00443         <span class="comment">// this should be not-virtual</span>
<a name="l00444"></a><a class="code" href="classost_1_1_read_lock.html#a166b6a55b9fa7072be782b7eccf30a98">00444</a>         ~<a class="code" href="classost_1_1_read_lock.html" title="The ReadLock class is used to protect a section of code through a ThreadLock for...">ReadLock</a>()
<a name="l00445"></a>00445                 { tl.unlock(); }
<a name="l00446"></a>00446 };
<a name="l00447"></a>00447 
<a name="l00468"></a><a class="code" href="classost_1_1_write_lock.html">00468</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_write_lock.html" title="The WriteLock class is used to protect a section of code through a ThreadLock for...">WriteLock</a>
<a name="l00469"></a>00469 {
<a name="l00470"></a>00470 <span class="keyword">private</span>:
<a name="l00471"></a>00471         <a class="code" href="classost_1_1_thread_lock.html" title="The ThreadLock class impliments a thread rwlock for optimal reader performance on...">ThreadLock</a>&amp; tl;
<a name="l00472"></a>00472 
<a name="l00473"></a>00473 <span class="keyword">public</span>:
<a name="l00479"></a><a class="code" href="classost_1_1_write_lock.html#a93a59b1f5f09dfdaee18eca85759f86e">00479</a>         <a class="code" href="classost_1_1_write_lock.html" title="The WriteLock class is used to protect a section of code through a ThreadLock for...">WriteLock</a>( <a class="code" href="classost_1_1_thread_lock.html" title="The ThreadLock class impliments a thread rwlock for optimal reader performance on...">ThreadLock</a>&amp; _tl ) : tl( _tl )
<a name="l00480"></a>00480                 { tl.writeLock(); }
<a name="l00484"></a>00484         <span class="comment">// this should be not-virtual</span>
<a name="l00485"></a><a class="code" href="classost_1_1_write_lock.html#a67a6fef0c02e06cbbf6069715c38cba5">00485</a>         ~<a class="code" href="classost_1_1_write_lock.html" title="The WriteLock class is used to protect a section of code through a ThreadLock for...">WriteLock</a>()
<a name="l00486"></a>00486                 { tl.unlock(); }
<a name="l00487"></a>00487 };
<a name="l00488"></a>00488 
<a name="l00489"></a>00489 
<a name="l00499"></a><a class="code" href="classost_1_1_mutex_counter.html">00499</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_mutex_counter.html" title="The Mutex Counter is a counter variable which can safely be incremented or decremented...">MutexCounter</a> : <span class="keyword">public</span> <a class="code" href="classost_1_1_mutex.html" title="The Mutex class is used to protect a section of code so that at any given time only...">Mutex</a>
<a name="l00500"></a>00500 {
<a name="l00501"></a>00501 <span class="keyword">private</span>:
<a name="l00502"></a>00502         <span class="keyword">volatile</span> <span class="keywordtype">int</span>    counter;
<a name="l00503"></a>00503 
<a name="l00504"></a>00504 <span class="keyword">public</span>:
<a name="l00510"></a>00510         <a class="code" href="classost_1_1_mutex_counter.html" title="The Mutex Counter is a counter variable which can safely be incremented or decremented...">MutexCounter</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">id</span> = NULL);
<a name="l00511"></a>00511 
<a name="l00519"></a>00519         <a class="code" href="classost_1_1_mutex_counter.html" title="The Mutex Counter is a counter variable which can safely be incremented or decremented...">MutexCounter</a>(<span class="keywordtype">int</span> initial, <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">id</span> = NULL);
<a name="l00520"></a>00520 
<a name="l00521"></a>00521         <span class="keyword">friend</span> <a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <span class="keywordtype">int</span> operator++(<a class="code" href="classost_1_1_mutex_counter.html" title="The Mutex Counter is a counter variable which can safely be incremented or decremented...">MutexCounter</a> &amp;mc);
<a name="l00522"></a>00522         <span class="keyword">friend</span> <a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <span class="keywordtype">int</span> operator--(<a class="code" href="classost_1_1_mutex_counter.html" title="The Mutex Counter is a counter variable which can safely be incremented or decremented...">MutexCounter</a> &amp;mc);
<a name="l00523"></a>00523 };
<a name="l00524"></a>00524 
<a name="l00535"></a><a class="code" href="classost_1_1_atomic_counter.html">00535</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_atomic_counter.html" title="The AtomicCounter class offers thread-safe manipulation of an integer counter.">AtomicCounter</a>
<a name="l00536"></a>00536 {
<a name="l00537"></a>00537 <span class="preprocessor">#ifndef CCXX_USE_WIN32_ATOMIC</span>
<a name="l00538"></a>00538 <span class="preprocessor"></span><span class="keyword">private</span>:
<a name="l00539"></a>00539 <span class="preprocessor">#if     defined(HAVE_ATOMIC_AIX)</span>
<a name="l00540"></a>00540 <span class="preprocessor"></span>        <span class="keyword">volatile</span> <span class="keywordtype">int</span> counter;
<a name="l00541"></a>00541 <span class="preprocessor">#elif   defined(HAVE_GCC_BITS_ATOMIC)</span>
<a name="l00542"></a>00542 <span class="preprocessor"></span>        <span class="keyword">volatile</span> _Atomic_word counter;
<a name="l00543"></a>00543 <span class="preprocessor">#elif   defined(HAVE_GCC_CXX_BITS_ATOMIC)</span>
<a name="l00544"></a>00544 <span class="preprocessor"></span>        <span class="keyword">volatile</span> _Atomic_word counter;
<a name="l00545"></a>00545 <span class="comment">//      __gnu_cxx::_Atomic_word counter;</span>
<a name="l00546"></a>00546 <span class="preprocessor">#elif   defined(HAVE_ATOMIC)</span>
<a name="l00547"></a>00547 <span class="preprocessor"></span>        atomic_t atomic;
<a name="l00548"></a>00548 <span class="preprocessor">#else</span>
<a name="l00549"></a>00549 <span class="preprocessor"></span>        <span class="keyword">volatile</span> <span class="keywordtype">int</span> counter;
<a name="l00550"></a>00550         pthread_mutex_t _mutex;
<a name="l00551"></a>00551 <span class="preprocessor">#endif</span>
<a name="l00552"></a>00552 <span class="preprocessor"></span>
<a name="l00553"></a>00553 <span class="keyword">public</span>:
<a name="l00557"></a>00557         <a class="code" href="classost_1_1_atomic_counter.html" title="The AtomicCounter class offers thread-safe manipulation of an integer counter.">AtomicCounter</a>();
<a name="l00558"></a>00558 
<a name="l00564"></a>00564         <a class="code" href="classost_1_1_atomic_counter.html" title="The AtomicCounter class offers thread-safe manipulation of an integer counter.">AtomicCounter</a>(<span class="keywordtype">int</span> value);
<a name="l00565"></a>00565 
<a name="l00566"></a>00566         ~<a class="code" href="classost_1_1_atomic_counter.html" title="The AtomicCounter class offers thread-safe manipulation of an integer counter.">AtomicCounter</a>();
<a name="l00567"></a>00567 
<a name="l00568"></a>00568         <span class="keywordtype">int</span> operator++(<span class="keywordtype">void</span>);
<a name="l00569"></a>00569         <span class="keywordtype">int</span> operator--(<span class="keywordtype">void</span>);
<a name="l00570"></a>00570         <span class="keywordtype">int</span> operator+=(<span class="keywordtype">int</span> change);
<a name="l00571"></a>00571         <span class="keywordtype">int</span> operator-=(<span class="keywordtype">int</span> change);
<a name="l00572"></a>00572         <span class="keywordtype">int</span> operator+(<span class="keywordtype">int</span> change);
<a name="l00573"></a>00573         <span class="keywordtype">int</span> operator-(<span class="keywordtype">int</span> change);
<a name="l00574"></a>00574         <span class="keywordtype">int</span> operator=(<span class="keywordtype">int</span> value);
<a name="l00575"></a>00575         <span class="keywordtype">bool</span> operator!(<span class="keywordtype">void</span>);
<a name="l00576"></a>00576         operator int();
<a name="l00577"></a>00577 <span class="preprocessor">#else</span>
<a name="l00578"></a>00578 <span class="preprocessor"></span><span class="keyword">private</span>:
<a name="l00579"></a>00579         <span class="keywordtype">long</span> atomic;
<a name="l00580"></a>00580 
<a name="l00581"></a>00581 <span class="keyword">public</span>:
<a name="l00582"></a>00582         <span class="keyword">inline</span> <a class="code" href="classost_1_1_atomic_counter.html" title="The AtomicCounter class offers thread-safe manipulation of an integer counter.">AtomicCounter</a>()
<a name="l00583"></a>00583                 {atomic = 0;};
<a name="l00584"></a>00584 
<a name="l00585"></a>00585         <span class="keyword">inline</span> <a class="code" href="classost_1_1_atomic_counter.html" title="The AtomicCounter class offers thread-safe manipulation of an integer counter.">AtomicCounter</a>(<span class="keywordtype">int</span> value)
<a name="l00586"></a>00586                 {atomic = value;};
<a name="l00587"></a>00587 
<a name="l00588"></a>00588         <span class="keyword">inline</span> <span class="keywordtype">int</span> operator++(<span class="keywordtype">void</span>)
<a name="l00589"></a>00589                 {<span class="keywordflow">return</span> InterlockedIncrement(&amp;atomic);};
<a name="l00590"></a>00590 
<a name="l00591"></a>00591         <span class="keyword">inline</span> <span class="keywordtype">int</span> operator--(<span class="keywordtype">void</span>)
<a name="l00592"></a>00592                 {<span class="keywordflow">return</span> InterlockedDecrement(&amp;atomic);};
<a name="l00593"></a>00593 
<a name="l00594"></a>00594         <span class="keywordtype">int</span> operator+=(<span class="keywordtype">int</span> change);
<a name="l00595"></a>00595 
<a name="l00596"></a>00596         <span class="keywordtype">int</span> operator-=(<span class="keywordtype">int</span> change);
<a name="l00597"></a>00597 
<a name="l00598"></a>00598         <span class="keyword">inline</span> <span class="keywordtype">int</span> operator+(<span class="keywordtype">int</span> change)
<a name="l00599"></a>00599                 {<span class="keywordflow">return</span> atomic + change;};
<a name="l00600"></a>00600 
<a name="l00601"></a>00601         <span class="keyword">inline</span> <span class="keywordtype">int</span> operator-(<span class="keywordtype">int</span> change)
<a name="l00602"></a>00602                 {<span class="keywordflow">return</span> atomic - change;};
<a name="l00603"></a>00603 
<a name="l00604"></a>00604         <span class="keyword">inline</span> <span class="keywordtype">int</span> operator=(<span class="keywordtype">int</span> value)
<a name="l00605"></a>00605                 {<span class="keywordflow">return</span> InterlockedExchange(&amp;atomic, value);};
<a name="l00606"></a>00606 
<a name="l00607"></a>00607         <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!(<span class="keywordtype">void</span>)
<a name="l00608"></a>00608                 {<span class="keywordflow">return</span> (atomic == 0) ? <span class="keyword">true</span> : <span class="keyword">false</span>;};
<a name="l00609"></a>00609 
<a name="l00610"></a>00610         <span class="keyword">inline</span> operator int()
<a name="l00611"></a>00611                 {<span class="keywordflow">return</span> atomic;};
<a name="l00612"></a>00612 <span class="preprocessor">#endif</span>
<a name="l00613"></a>00613 <span class="preprocessor"></span>};
<a name="l00614"></a>00614 
<a name="l00615"></a>00615 <span class="preprocessor">#ifndef WIN32</span>
<a name="l00616"></a>00616 <span class="preprocessor"></span>
<a name="l00636"></a><a class="code" href="classost_1_1_conditional.html">00636</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_conditional.html" title="A conditional variable synchcronization object for one to one and one to many signal...">Conditional</a>
<a name="l00637"></a>00637 {
<a name="l00638"></a>00638 <span class="keyword">private</span>:
<a name="l00639"></a>00639         pthread_cond_t _cond;
<a name="l00640"></a>00640         pthread_mutex_t _mutex;
<a name="l00641"></a>00641 
<a name="l00642"></a>00642 <span class="keyword">public</span>:
<a name="l00648"></a>00648         <a class="code" href="classost_1_1_conditional.html" title="A conditional variable synchcronization object for one to one and one to many signal...">Conditional</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">id</span> = NULL);
<a name="l00649"></a>00649 
<a name="l00653"></a>00653         <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_conditional.html" title="A conditional variable synchcronization object for one to one and one to many signal...">Conditional</a>();
<a name="l00654"></a>00654 
<a name="l00660"></a>00660         <span class="keywordtype">void</span> signal(<span class="keywordtype">bool</span> broadcast);
<a name="l00661"></a>00661 
<a name="l00668"></a>00668         <span class="keywordtype">bool</span> <a class="code" href="namespaceost.html#a24c7774639b3768bdd45b65a296f6369">wait</a>(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timer = 0, <span class="keywordtype">bool</span> locked = <span class="keyword">false</span>);
<a name="l00669"></a>00669 
<a name="l00676"></a>00676         <span class="keywordtype">void</span> enterMutex(<span class="keywordtype">void</span>);
<a name="l00677"></a>00677 
<a name="l00686"></a><a class="code" href="classost_1_1_conditional.html#a2a3bf89c582dad8ba7e81370fd361668">00686</a>         <span class="keyword">inline</span> <span class="keywordtype">void</span> lock(<span class="keywordtype">void</span>)
<a name="l00687"></a>00687                 {enterMutex();};
<a name="l00688"></a>00688 
<a name="l00699"></a>00699         <span class="keywordtype">bool</span> tryEnterMutex(<span class="keywordtype">void</span>);
<a name="l00700"></a>00700 
<a name="l00701"></a><a class="code" href="classost_1_1_conditional.html#a507839fac82a32f946fa5f87d41bef28">00701</a>         <span class="keyword">inline</span> <span class="keywordtype">bool</span> test(<span class="keywordtype">void</span>)
<a name="l00702"></a>00702                 {<span class="keywordflow">return</span> tryEnterMutex();};
<a name="l00703"></a>00703 
<a name="l00709"></a>00709         <span class="keywordtype">void</span> leaveMutex(<span class="keywordtype">void</span>);
<a name="l00710"></a>00710 
<a name="l00711"></a><a class="code" href="classost_1_1_conditional.html#a8b6126bbb6e58c1b8ef937bebf4af222">00711</a>         <span class="keyword">inline</span> <span class="keywordtype">void</span> unlock(<span class="keywordtype">void</span>)
<a name="l00712"></a>00712                 {<span class="keywordflow">return</span> leaveMutex();};
<a name="l00713"></a>00713 };
<a name="l00714"></a>00714 <span class="preprocessor">#endif</span>
<a name="l00715"></a>00715 <span class="preprocessor"></span>
<a name="l00733"></a><a class="code" href="classost_1_1_semaphore.html">00733</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_semaphore.html" title="A semaphore is generally used as a synchronization object between multiple threads...">Semaphore</a>
<a name="l00734"></a>00734 {
<a name="l00735"></a>00735 <span class="keyword">private</span>:
<a name="l00736"></a>00736 <span class="preprocessor">#ifndef WIN32</span>
<a name="l00737"></a>00737 <span class="preprocessor"></span>        <span class="keywordtype">unsigned</span> _count, _waiters;
<a name="l00738"></a>00738         pthread_mutex_t _mutex;
<a name="l00739"></a>00739         pthread_cond_t _cond;
<a name="l00740"></a>00740 <span class="preprocessor">#else</span>
<a name="l00741"></a>00741 <span class="preprocessor"></span>        <a class="code" href="serial_8h.html#a069bb8cb95b0528d5ce0304bb5561a40">HANDLE</a>  semObject;
<a name="l00742"></a>00742 <span class="preprocessor">#endif // !WIN32</span>
<a name="l00743"></a>00743 <span class="preprocessor"></span>
<a name="l00744"></a>00744 <span class="keyword">public</span>:
<a name="l00753"></a>00753         <a class="code" href="classost_1_1_semaphore.html" title="A semaphore is generally used as a synchronization object between multiple threads...">Semaphore</a>(<span class="keywordtype">unsigned</span> resource = 0);
<a name="l00754"></a>00754 
<a name="l00761"></a>00761         <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_semaphore.html" title="A semaphore is generally used as a synchronization object between multiple threads...">Semaphore</a>();
<a name="l00762"></a>00762 
<a name="l00778"></a>00778         <span class="keywordtype">bool</span> <a class="code" href="namespaceost.html#a24c7774639b3768bdd45b65a296f6369">wait</a>(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0);
<a name="l00779"></a>00779 
<a name="l00791"></a>00791         <span class="keywordtype">void</span> post(<span class="keywordtype">void</span>);
<a name="l00792"></a>00792 
<a name="l00793"></a>00793 <span class="preprocessor">#ifndef WIN32</span>
<a name="l00794"></a>00794 <span class="preprocessor"></span>
<a name="l00802"></a>00802   <span class="keywordtype">void</span> force_unlock_after_cancellation();
<a name="l00803"></a>00803 
<a name="l00804"></a>00804 <span class="preprocessor">#endif // WIN32</span>
<a name="l00805"></a>00805 <span class="preprocessor"></span>
<a name="l00806"></a>00806         <span class="comment">// FIXME: how implement getValue for posix compatibility ?</span>
<a name="l00807"></a>00807         <span class="comment">// not portable...</span>
<a name="l00808"></a>00808 <span class="preprocessor">#if     0</span>
<a name="l00809"></a>00809 <span class="preprocessor"></span>
<a name="l00814"></a>00814         <span class="keywordtype">int</span> getValue(<span class="keywordtype">void</span>);
<a name="l00815"></a>00815 <span class="preprocessor">#endif</span>
<a name="l00816"></a>00816 <span class="preprocessor"></span>};
<a name="l00817"></a>00817 
<a name="l00837"></a><a class="code" href="classost_1_1_semaphore_lock.html">00837</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_semaphore_lock.html" title="The SemaphoreLock class is used to protect a section of code through a semaphore...">SemaphoreLock</a>
<a name="l00838"></a>00838 {
<a name="l00839"></a>00839 <span class="keyword">private</span>:
<a name="l00840"></a>00840         <a class="code" href="classost_1_1_semaphore.html" title="A semaphore is generally used as a synchronization object between multiple threads...">Semaphore</a>&amp; sem;
<a name="l00841"></a>00841 
<a name="l00842"></a>00842 <span class="keyword">public</span>:
<a name="l00846"></a><a class="code" href="classost_1_1_semaphore_lock.html#adb34354071ac2005870fb78926887a05">00846</a>         <a class="code" href="classost_1_1_semaphore_lock.html" title="The SemaphoreLock class is used to protect a section of code through a semaphore...">SemaphoreLock</a>( <a class="code" href="classost_1_1_semaphore.html" title="A semaphore is generally used as a synchronization object between multiple threads...">Semaphore</a>&amp; _sem ) : sem( _sem )
<a name="l00847"></a>00847                 { sem.wait(); }
<a name="l00851"></a>00851         <span class="comment">// this should be not-virtual</span>
<a name="l00852"></a><a class="code" href="classost_1_1_semaphore_lock.html#a59bf7e09b61fd3b900070841fae86597">00852</a>         ~<a class="code" href="classost_1_1_semaphore_lock.html" title="The SemaphoreLock class is used to protect a section of code through a semaphore...">SemaphoreLock</a>()
<a name="l00853"></a>00853                 { sem.post(); }
<a name="l00854"></a>00854 };
<a name="l00855"></a>00855 
<a name="l00869"></a><a class="code" href="classost_1_1_event.html">00869</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_event.html" title="The Event class implements a feature originally found in the WIN32 API; event notification...">Event</a>
<a name="l00870"></a>00870 {
<a name="l00871"></a>00871 <span class="keyword">private</span>:
<a name="l00872"></a>00872 <span class="preprocessor">#ifndef WIN32</span>
<a name="l00873"></a>00873 <span class="preprocessor"></span>        pthread_mutex_t _mutex;
<a name="l00874"></a>00874         pthread_cond_t _cond;
<a name="l00875"></a>00875         <span class="keywordtype">bool</span> _signaled;
<a name="l00876"></a>00876         <span class="keywordtype">int</span> _count;
<a name="l00877"></a>00877 <span class="preprocessor">#else</span>
<a name="l00878"></a>00878 <span class="preprocessor"></span>        <a class="code" href="serial_8h.html#a069bb8cb95b0528d5ce0304bb5561a40">HANDLE</a> cond;
<a name="l00879"></a>00879 <span class="preprocessor">#endif</span>
<a name="l00880"></a>00880 <span class="preprocessor"></span>
<a name="l00881"></a>00881 <span class="keyword">public</span>:
<a name="l00882"></a>00882         <a class="code" href="classost_1_1_event.html" title="The Event class implements a feature originally found in the WIN32 API; event notification...">Event</a>();
<a name="l00883"></a>00883 
<a name="l00884"></a>00884         <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_event.html" title="The Event class implements a feature originally found in the WIN32 API; event notification...">Event</a>();
<a name="l00885"></a>00885 
<a name="l00892"></a>00892         <span class="keywordtype">void</span> reset(<span class="keywordtype">void</span>);
<a name="l00893"></a>00893 
<a name="l00897"></a>00897         <span class="keywordtype">void</span> signal(<span class="keywordtype">void</span>);
<a name="l00898"></a>00898 
<a name="l00907"></a>00907         <span class="keywordtype">bool</span> <a class="code" href="namespaceost.html#a24c7774639b3768bdd45b65a296f6369">wait</a>(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timer);
<a name="l00908"></a>00908         <span class="keywordtype">bool</span> <a class="code" href="namespaceost.html#a24c7774639b3768bdd45b65a296f6369">wait</a>(<span class="keywordtype">void</span>);
<a name="l00909"></a>00909 };
<a name="l00910"></a>00910 
<a name="l00911"></a>00911 
<a name="l01093"></a><a class="code" href="classost_1_1_thread.html">01093</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> Thread
<a name="l01094"></a>01094 {
<a name="l01095"></a>01095 <span class="keyword">public</span>:
<a name="l01099"></a><a class="code" href="classost_1_1_thread.html#ab9538e839c06104af2974b77d2a5674d">01099</a>         <span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="classost_1_1_thread.html#ab9538e839c06104af2974b77d2a5674d" title="How to raise error.">Throw</a> {
<a name="l01100"></a><a class="code" href="classost_1_1_thread.html#ab9538e839c06104af2974b77d2a5674da1b058025329425c90f383d124ee605e5">01100</a>                 throwNothing,  
<a name="l01101"></a><a class="code" href="classost_1_1_thread.html#ab9538e839c06104af2974b77d2a5674daea5957cd08cfecf17f366352bcf9ad80">01101</a>                 throwObject,   
<a name="l01102"></a><a class="code" href="classost_1_1_thread.html#ab9538e839c06104af2974b77d2a5674da8e51a6870e65238764becffff92d7f54">01102</a>                 throwException 
<a name="l01103"></a>01103         } Throw;
<a name="l01104"></a>01104 
<a name="l01108"></a><a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69b">01108</a>         <span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69b" title="How work cancellation.">Cancel</a> {
<a name="l01109"></a><a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69babbf14157c17311ec31f0967032ecb357">01109</a>                 cancelInitial=0,  
<a name="l01110"></a><a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69bab02b8cd8d899a693e8cbb86082f4ef16">01110</a>                 cancelDeferred=1, 
<a name="l01111"></a><a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69ba57f820ea4f7a326c27cc504a213e167d">01111</a>                 cancelImmediate,  
<a name="l01112"></a><a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69bae07cc9f6d3d7333c8cce543a8bb58215">01112</a>                 cancelDisabled,   
<a name="l01113"></a><a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69baa194b63cafc5387684afe7943fe3b5f0">01113</a>                 cancelManual,     
<a name="l01115"></a><a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69badf753e6d700f194c1b8f695a9bd67554">01115</a>                 cancelDefault=cancelDeferred
<a name="l01117"></a>01117         } Cancel;
<a name="l01118"></a>01118 
<a name="l01122"></a><a class="code" href="classost_1_1_thread.html#aff7bd364ce645eac95affbf74f1a7087">01122</a>         <span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="classost_1_1_thread.html#aff7bd364ce645eac95affbf74f1a7087" title="How work suspend.">Suspend</a> {
<a name="l01123"></a><a class="code" href="classost_1_1_thread.html#aff7bd364ce645eac95affbf74f1a7087a27f2f61f4bc18b64e9c25f73bb008a38">01123</a>                 suspendEnable, 
<a name="l01124"></a><a class="code" href="classost_1_1_thread.html#aff7bd364ce645eac95affbf74f1a7087a0e9f14f0e69d8c12c36a46d108a5074b">01124</a>                 suspendDisable 
<a name="l01125"></a>01125         } Suspend;
<a name="l01126"></a>01126 
<a name="l01127"></a>01127 <span class="preprocessor">#ifndef WIN32</span>
<a name="l01128"></a>01128 <span class="preprocessor"></span>
<a name="l01129"></a><a class="code" href="classost_1_1_thread.html#abc1a729c4204bc85f58c47042f429acb">01129</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classost_1_1_posix_thread.html">PosixThread</a>;
<a name="l01130"></a>01130 <span class="preprocessor">#endif</span>
<a name="l01131"></a>01131 <span class="preprocessor"></span>
<a name="l01132"></a><a class="code" href="classost_1_1_thread.html#a9b6e94561c96e07e8f2dd776bbc19396">01132</a> <span class="keyword">friend</span> <span class="keyword">class </span>DummyThread;
<a name="l01133"></a>01133 <span class="keyword">private</span>:
<a name="l01134"></a><a class="code" href="classost_1_1_thread.html#abbf97e2c58c760acb67b9db3a7ba11db">01134</a>         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classost_1_1_cancellation.html" title="A class to automatically set the thread cancellation mode of a member function.">Cancellation</a>;
<a name="l01135"></a><a class="code" href="classost_1_1_thread.html#ae156bb5074cfe5c3a729890e0ded952f">01135</a>         <span class="keyword">friend</span> <span class="keyword">class </span>postream_type;
<a name="l01136"></a><a class="code" href="classost_1_1_thread.html#af08013a89bf19b835ba6f75a60f870ed">01136</a>         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classost_1_1_slog.html" title="The slog class is used to stream messages to the system&amp;#39;s logging facility (syslogd)...">Slog</a>;
<a name="l01137"></a>01137 
<a name="l01138"></a>01138         <a class="code" href="classost_1_1_semaphore.html" title="A semaphore is generally used as a synchronization object between multiple threads...">Semaphore</a> joinSem;
<a name="l01139"></a>01139         <span class="keyword">static</span> Thread* _main;
<a name="l01140"></a>01140 
<a name="l01141"></a>01141         Thread *_parent;
<a name="l01142"></a>01142         <a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69b" title="How work cancellation.">Cancel</a> _cancel;
<a name="l01143"></a>01143         <a class="code" href="classost_1_1_semaphore.html" title="A semaphore is generally used as a synchronization object between multiple threads...">Semaphore</a> *_start;
<a name="l01144"></a>01144 
<a name="l01145"></a>01145         <span class="comment">// private data</span>
<a name="l01146"></a><a class="code" href="classost_1_1_thread.html#ae3c1cdb20d70b22a5c0bf395614eefff">01146</a>         <span class="keyword">friend</span> <span class="keyword">class </span>ThreadImpl;
<a name="l01147"></a>01147         <span class="keyword">class </span>ThreadImpl* priv;
<a name="l01148"></a>01148 
<a name="l01149"></a>01149 <span class="keyword">public</span>:
<a name="l01150"></a>01150         <span class="keyword">static</span> Thread *<span class="keyword">get</span>(void);
<a name="l01151"></a>01151 
<a name="l01152"></a>01152 <span class="keyword">private</span>:
<a name="l01153"></a>01153 <span class="preprocessor">#ifdef  WIN32</span>
<a name="l01154"></a>01154 <span class="preprocessor"></span>        <span class="keyword">static</span> <span class="keywordtype">unsigned</span> __stdcall Execute(Thread *th);
<a name="l01155"></a>01155 <span class="preprocessor">#endif</span>
<a name="l01156"></a>01156 <span class="preprocessor"></span>
<a name="l01157"></a>01157         <span class="comment">// close current thread, free all and call Notify</span>
<a name="l01158"></a>01158         <span class="keywordtype">void</span> close();
<a name="l01159"></a>01159 
<a name="l01160"></a>01160 <span class="keyword">private</span>:
<a name="l01161"></a>01161         <span class="keywordtype">char</span> _name[32];
<a name="l01162"></a>01162         <span class="keyword">static</span> <span class="keywordtype">size_t</span> _autostack;
<a name="l01163"></a>01163 
<a name="l01164"></a>01164 <span class="preprocessor">#ifdef WIN32</span>
<a name="l01165"></a>01165 <span class="preprocessor"></span>        DWORD waitHandle(<a class="code" href="serial_8h.html#a069bb8cb95b0528d5ce0304bb5561a40">HANDLE</a> obj, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout);
<a name="l01166"></a>01166 <span class="preprocessor">#endif</span>
<a name="l01167"></a>01167 <span class="preprocessor"></span>
<a name="l01168"></a>01168 <span class="keyword">protected</span>:
<a name="l01176"></a>01176         <span class="keywordtype">void</span> setName(<span class="keyword">const</span> <span class="keywordtype">char</span> *text);
<a name="l01177"></a>01177 
<a name="l01187"></a>01187         <span class="keyword">virtual</span> <span class="keywordtype">void</span> run(<span class="keywordtype">void</span>) = 0;
<a name="l01188"></a>01188 
<a name="l01210"></a>01210         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <span class="keyword">final</span>(void);
<a name="l01211"></a>01211 
<a name="l01223"></a>01223         <span class="keyword">virtual</span> <span class="keywordtype">void</span> initial(<span class="keywordtype">void</span>);
<a name="l01224"></a>01224 
<a name="l01234"></a>01234         <span class="keyword">virtual</span> <span class="keywordtype">void</span>* getExtended(<span class="keywordtype">void</span>);
<a name="l01235"></a>01235 
<a name="l01243"></a>01243         <span class="keyword">virtual</span> <span class="keywordtype">void</span> notify(Thread*);
<a name="l01244"></a>01244 
<a name="l01250"></a>01250         <span class="keywordtype">void</span> exit(<span class="keywordtype">void</span>);
<a name="l01251"></a>01251 
<a name="l01255"></a>01255         <span class="keywordtype">void</span> sync(<span class="keywordtype">void</span>);
<a name="l01256"></a>01256 
<a name="l01260"></a>01260         <span class="keywordtype">bool</span> testCancel(<span class="keywordtype">void</span>);
<a name="l01261"></a>01261 
<a name="l01271"></a>01271         <span class="keywordtype">void</span> setCancel(<a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69b" title="How work cancellation.">Cancel</a> mode);
<a name="l01272"></a>01272 
<a name="l01280"></a>01280         <span class="keywordtype">void</span> setSuspend(<a class="code" href="classost_1_1_thread.html#aff7bd364ce645eac95affbf74f1a7087" title="How work suspend.">Suspend</a> mode);
<a name="l01281"></a>01281 
<a name="l01290"></a>01290         <span class="keywordtype">void</span> terminate(<span class="keywordtype">void</span>);
<a name="l01291"></a>01291 
<a name="l01295"></a><a class="code" href="classost_1_1_thread.html#a5e574c2c5f388277527c9257524dd654">01295</a>         <span class="keyword">inline</span> <span class="keywordtype">void</span> clrParent(<span class="keywordtype">void</span>)
<a name="l01296"></a>01296                 {_parent = NULL;};
<a name="l01297"></a>01297 
<a name="l01298"></a>01298 <span class="keyword">public</span>:
<a name="l01307"></a>01307         Thread(<span class="keywordtype">bool</span> isMain);
<a name="l01308"></a>01308 
<a name="l01320"></a>01320         Thread(<span class="keywordtype">int</span> pri = 0, <span class="keywordtype">size_t</span> stack = 0);
<a name="l01321"></a>01321 
<a name="l01322"></a>01322 <span class="preprocessor">#ifndef WIN32</span>
<a name="l01323"></a>01323 <span class="preprocessor"></span>
<a name="l01331"></a>01331         Thread(<span class="keyword">const</span> Thread &amp;th);
<a name="l01332"></a>01332 <span class="preprocessor">#endif</span>
<a name="l01333"></a>01333 <span class="preprocessor"></span>
<a name="l01340"></a>01340         <span class="keyword">virtual</span> ~Thread();
<a name="l01341"></a>01341 
<a name="l01347"></a><a class="code" href="classost_1_1_thread.html#accd29b724539d63a8495d954f9f56c72">01347</a>         <span class="keyword">static</span> <span class="keywordtype">void</span> setStack(<span class="keywordtype">size_t</span> size = 0)
<a name="l01348"></a>01348                 {_autostack = size;};
<a name="l01349"></a>01349 
<a name="l01359"></a>01359         <span class="keyword">static</span> <span class="keywordtype">void</span> sleep(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> msec);
<a name="l01360"></a>01360 
<a name="l01365"></a>01365         <span class="keyword">static</span> <span class="keywordtype">void</span> yield(<span class="keywordtype">void</span>);
<a name="l01366"></a>01366 
<a name="l01379"></a>01379         <span class="keywordtype">int</span> start(<a class="code" href="classost_1_1_semaphore.html" title="A semaphore is generally used as a synchronization object between multiple threads...">Semaphore</a> *start = 0);
<a name="l01380"></a>01380 
<a name="l01389"></a>01389         <span class="keywordtype">int</span> detach(<a class="code" href="classost_1_1_semaphore.html" title="A semaphore is generally used as a synchronization object between multiple threads...">Semaphore</a> *start = 0);
<a name="l01390"></a>01390 
<a name="l01397"></a><a class="code" href="classost_1_1_thread.html#aac5bc230c3bad5c837baa9e6d01f4c24">01397</a>         <span class="keyword">inline</span> Thread *getParent(<span class="keywordtype">void</span>)
<a name="l01398"></a>01398                 {<span class="keywordflow">return</span> _parent;};
<a name="l01399"></a>01399 
<a name="l01406"></a>01406         <span class="keywordtype">void</span> suspend(<span class="keywordtype">void</span>);
<a name="l01407"></a>01407 
<a name="l01411"></a>01411         <span class="keywordtype">void</span> resume(<span class="keywordtype">void</span>);
<a name="l01412"></a>01412 
<a name="l01419"></a><a class="code" href="classost_1_1_thread.html#a3524521d80bcc0562fb59a28ce5d62a4">01419</a>         <span class="keyword">inline</span> <a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69b" title="How work cancellation.">Cancel</a> getCancel(<span class="keywordtype">void</span>)
<a name="l01420"></a>01420                 {<span class="keywordflow">return</span> _cancel;};
<a name="l01421"></a>01421 
<a name="l01428"></a>01428         <span class="keywordtype">bool</span> isRunning(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l01429"></a>01429 
<a name="l01435"></a>01435         <span class="keywordtype">bool</span> isDetached(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l01436"></a>01436 
<a name="l01440"></a>01440         <span class="keywordtype">void</span> join(<span class="keywordtype">void</span>);
<a name="l01441"></a>01441 
<a name="l01448"></a>01448         <span class="keywordtype">bool</span> isThread(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l01449"></a>01449 
<a name="l01455"></a>01455         <a class="code" href="thread_8h.html#a3f0d0226a694bf1e508e1b1c758e6ae6">cctid_t</a> getId(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l01456"></a>01456 
<a name="l01463"></a><a class="code" href="classost_1_1_thread.html#a6b578a4a82d61060d1b17109caddc1a5">01463</a>         <span class="keyword">const</span> <span class="keywordtype">char</span> *getName(<span class="keywordtype">void</span>)<span class="keyword"> const</span>
<a name="l01464"></a>01464 <span class="keyword">                </span>{<span class="keywordflow">return</span> _name;};
<a name="l01465"></a>01465 
<a name="l01471"></a>01471         <span class="keyword">static</span> Throw getException(<span class="keywordtype">void</span>);
<a name="l01472"></a>01472 
<a name="l01478"></a>01478         <span class="keyword">static</span> <span class="keywordtype">void</span> setException(Throw mode);
<a name="l01479"></a>01479 
<a name="l01486"></a><a class="code" href="classost_1_1_thread.html#a2742c471d2abe8712368ccff8d534702">01486</a>         <span class="keyword">friend</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> operator++(Thread &amp;th)
<a name="l01487"></a>01487                 {<span class="keywordflow">if</span> (th._start) th._start-&gt;<a class="code" href="classost_1_1_semaphore.html#a7535c9c3f3c60596b21b5275342cbe1e" title="Posting to a semaphore increments its current value and releases the first thread...">post</a>();};
<a name="l01488"></a>01488 
<a name="l01489"></a><a class="code" href="classost_1_1_thread.html#aa797f8e5a1ea5b857251f98f0d50614e">01489</a>         <span class="keyword">friend</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> operator--(Thread &amp;th)
<a name="l01490"></a>01490                 {<span class="keywordflow">if</span> (th._start) th._start-&gt;<a class="code" href="classost_1_1_semaphore.html#a1f2526be16a463d2392a74f668a91d80" title="Wait is used to keep a thread held until the semaphore counter is greater than 0...">wait</a>();};
<a name="l01491"></a>01491 
<a name="l01492"></a>01492 <span class="preprocessor">#ifdef WIN32</span>
<a name="l01493"></a>01493 <span class="preprocessor"></span>        <span class="keywordtype">bool</span> isCancelled() <span class="keyword">const</span>;
<a name="l01494"></a>01494 
<a name="l01495"></a>01495         <span class="keyword">static</span> DWORD waitThread(<a class="code" href="serial_8h.html#a069bb8cb95b0528d5ce0304bb5561a40">HANDLE</a> hRef, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout);
<a name="l01496"></a>01496 <span class="preprocessor">#endif</span>
<a name="l01497"></a>01497 <span class="preprocessor"></span>
<a name="l01505"></a>01505         <span class="keyword">static</span> Cancel enterCancel(<span class="keywordtype">void</span>);
<a name="l01506"></a>01506 
<a name="l01512"></a>01512         <span class="keyword">static</span> <span class="keywordtype">void</span> exitCancel(Cancel cancel);
<a name="l01513"></a>01513 };
<a name="l01514"></a>01514 
<a name="l01524"></a><a class="code" href="classost_1_1_cancellation.html">01524</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_cancellation.html" title="A class to automatically set the thread cancellation mode of a member function.">Cancellation</a>
<a name="l01525"></a>01525 {
<a name="l01526"></a>01526 <span class="keyword">private</span>:
<a name="l01527"></a>01527         <a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69b" title="How work cancellation.">Thread::Cancel</a> prior;
<a name="l01528"></a>01528 
<a name="l01529"></a>01529 <span class="keyword">public</span>:
<a name="l01530"></a>01530         <a class="code" href="classost_1_1_cancellation.html" title="A class to automatically set the thread cancellation mode of a member function.">Cancellation</a>(<a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69b" title="How work cancellation.">Thread::Cancel</a> cancel);
<a name="l01531"></a>01531         ~<a class="code" href="classost_1_1_cancellation.html" title="A class to automatically set the thread cancellation mode of a member function.">Cancellation</a>();
<a name="l01532"></a>01532 };
<a name="l01533"></a>01533 
<a name="l01534"></a>01534 <span class="preprocessor">#if !defined(WIN32) &amp;&amp; !defined(__MINGW32__)</span>
<a name="l01535"></a><a class="code" href="namespaceost.html#a5dca865b107f598c88bd2106ea56c16e">01535</a> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">int</span>             <a class="code" href="namespaceost.html#a5dca865b107f598c88bd2106ea56c16e">signo_t</a>;
<a name="l01536"></a>01536 
<a name="l01537"></a><a class="code" href="classost_1_1_posix_thread.html">01537</a> <span class="keyword">class </span><a class="code" href="classost_1_1_posix_thread.html">PosixThread</a>: <span class="keyword">public</span> Thread
<a name="l01538"></a>01538 {
<a name="l01539"></a>01539 <span class="keyword">private</span>:
<a name="l01540"></a>01540 <span class="preprocessor">#ifndef WIN32</span>
<a name="l01541"></a>01541 <span class="preprocessor"></span>
<a name="l01542"></a><a class="code" href="classost_1_1_posix_thread.html#ae3c1cdb20d70b22a5c0bf395614eefff">01542</a>         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classost_1_1_posix_thread.html#ae3c1cdb20d70b22a5c0bf395614eefff">ThreadImpl</a>;
<a name="l01543"></a><a class="code" href="classost_1_1_posix_thread.html#adbc148eaddd341d7ae4d07c9e9e33bfd">01543</a>         <span class="keyword">friend</span> <span class="keyword">class </span>Thread;
<a name="l01544"></a>01544 <span class="preprocessor">#endif</span>
<a name="l01545"></a>01545 <span class="preprocessor"></span><span class="preprocessor">#ifndef CCXX_SIG_THREAD_ALARM</span>
<a name="l01546"></a>01546 <span class="preprocessor"></span>        <span class="keyword">static</span> <a class="code" href="classost_1_1_posix_thread.html">PosixThread</a> *_timer;
<a name="l01547"></a>01547         <span class="keyword">static</span> <a class="code" href="classost_1_1_mutex.html" title="The Mutex class is used to protect a section of code so that at any given time only...">Mutex</a> _arm;
<a name="l01548"></a>01548 <span class="preprocessor">#endif</span>
<a name="l01549"></a>01549 <span class="preprocessor"></span>
<a name="l01550"></a>01550         time_t  _alarm;
<a name="l01551"></a>01551         <span class="keyword">static</span> <span class="keywordtype">void</span> signalThread(Thread* th,<a class="code" href="namespaceost.html#a5dca865b107f598c88bd2106ea56c16e">signo_t</a> signo);
<a name="l01552"></a>01552 <span class="keyword">protected</span>:
<a name="l01553"></a>01553 
<a name="l01560"></a><a class="code" href="classost_1_1_posix_thread.html#a1698de2b943084fe05849cbd42099156">01560</a>         <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_posix_thread.html#a1698de2b943084fe05849cbd42099156" title="In the Posix version of Common C++, this can be used to send a signal into the parent...">signalParent</a>(<a class="code" href="namespaceost.html#a5dca865b107f598c88bd2106ea56c16e">signo_t</a> signo)
<a name="l01561"></a>01561                 { signalThread(_parent,signo); };
<a name="l01562"></a>01562 
<a name="l01569"></a><a class="code" href="classost_1_1_posix_thread.html#ad13ab707409d229be9c5b64a0e2ec7ad">01569</a>         <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_posix_thread.html#ad13ab707409d229be9c5b64a0e2ec7ad" title="In the Posix version of Common C++, this can be used to send a signal into the main...">signalMain</a>(<a class="code" href="namespaceost.html#a5dca865b107f598c88bd2106ea56c16e">signo_t</a> signo)
<a name="l01570"></a>01570                 { signalThread(_main,signo);};
<a name="l01571"></a>01571 
<a name="l01576"></a>01576         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_posix_thread.html#a9ce41764e5846b94195d367a0c7c7e4e" title="A derivable method to call when a SIGALRM is being delivered to a specific thread...">onTimer</a>(<span class="keywordtype">void</span>);
<a name="l01577"></a>01577 
<a name="l01582"></a>01582         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_posix_thread.html#acfb12beb826e7895f54a5af9e6c38434" title="A derived method to handle hangup events being delivered to a specific thread.">onHangup</a>(<span class="keywordtype">void</span>);
<a name="l01583"></a>01583 
<a name="l01588"></a>01588         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_posix_thread.html#adb1aa6d0e6baa04c37e1a61b641414e7" title="A derived method to call when a SIGABRT is being delivered to a specific thread.">onException</a>(<span class="keywordtype">void</span>);
<a name="l01589"></a>01589 
<a name="l01594"></a>01594         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_posix_thread.html#a105a9f61fcdf62acd3d5563f5d9e3905" title="A derived method to call when a SIGPIPE is being delivered to a specific thread.">onDisconnect</a>(<span class="keywordtype">void</span>);
<a name="l01595"></a>01595 
<a name="l01600"></a>01600         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_posix_thread.html#a6e2788cfba0b31813d4cab891f7e1feb" title="A derived method to handle asynchronous I/O requests delivered to the specified thread...">onPolling</a>(<span class="keywordtype">void</span>);
<a name="l01601"></a>01601 
<a name="l01608"></a>01608         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_posix_thread.html#a3db7c01850d939ca1bb0fdc67aeb3efa" title="A derivable method to call for delivering a signal event to a specified thread.">onSignal</a>(<span class="keywordtype">int</span>);
<a name="l01609"></a>01609 
<a name="l01622"></a>01622         <span class="keywordtype">void</span> <a class="code" href="classost_1_1_posix_thread.html#ad9c8ffa69fec8c3a139fe3d7068667a0" title="Used to specify a timeout event that can be delivered to the current thread via SIGALRM...">setTimer</a>(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timer, <span class="keywordtype">bool</span> periodic = <span class="keyword">false</span>);
<a name="l01623"></a>01623 
<a name="l01630"></a>01630         <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> <a class="code" href="classost_1_1_posix_thread.html#a79beb0fde40ee5073fe6468de94eef05" title="Gets the time remaining for the current threads timer before it expires.">getTimer</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l01631"></a>01631 
<a name="l01637"></a>01637         <span class="keywordtype">void</span> <a class="code" href="classost_1_1_posix_thread.html#aed0f4cae60e5694960260d13664c1367" title="Terminates the timer before the timeout period has expired.">endTimer</a>(<span class="keywordtype">void</span>);
<a name="l01638"></a>01638 
<a name="l01639"></a>01639 <span class="preprocessor">#if defined(HAVE_SIGWAIT) || defined(HAVE_SIGWAIT2)</span>
<a name="l01640"></a>01640 <span class="preprocessor"></span>
<a name="l01646"></a>01646         <span class="keywordtype">void</span> <a class="code" href="classost_1_1_posix_thread.html#a1545316f7caaabf86edd1874eada6732" title="Used to wait on a Posix signal from another thread.">waitSignal</a>(<a class="code" href="namespaceost.html#a5dca865b107f598c88bd2106ea56c16e">signo_t</a> signo);
<a name="l01647"></a>01647 <span class="preprocessor">#endif</span>
<a name="l01648"></a>01648 <span class="preprocessor"></span>
<a name="l01655"></a>01655         <span class="keywordtype">void</span> <a class="code" href="classost_1_1_posix_thread.html#ab665136ffddf808ab652c51f9caa953c" title="Used to enable or disable a signal within the current thread.">setSignal</a>(<span class="keywordtype">int</span> signo, <span class="keywordtype">bool</span> active);
<a name="l01656"></a>01656 
<a name="l01663"></a>01663         pthread_attr_t *<a class="code" href="classost_1_1_posix_thread.html#ae7b26aaccd916f0905a30707d7ef4067" title="Access to pthread_attr structure this allows setting/modifying pthread attributes...">getPthreadAttrPtr</a>(<span class="keywordtype">void</span>);
<a name="l01664"></a>01664 
<a name="l01669"></a>01669         pthread_t <a class="code" href="classost_1_1_posix_thread.html#af114ce4574592143ef016dd9cd2bd11d" title="Get pthread_t of underlying posix thread (useful for debugging/logging).">getPthreadId</a>(<span class="keywordtype">void</span>);
<a name="l01670"></a>01670 
<a name="l01671"></a>01671 <span class="keyword">public</span>:
<a name="l01672"></a>01672 
<a name="l01673"></a>01673         <a class="code" href="classost_1_1_posix_thread.html#aeeba18c7e3ef9f718b20b7477e602735">PosixThread</a>(<span class="keywordtype">int</span> pri = 0, <span class="keywordtype">size_t</span> stack = 0);
<a name="l01674"></a>01674 
<a name="l01680"></a><a class="code" href="classost_1_1_posix_thread.html#afa168ff1446785a43b1123703d999207">01680</a>         <span class="keyword">inline</span> <span class="keywordtype">void</span> signalThread(<span class="keywordtype">int</span> signo)
<a name="l01681"></a>01681                 {<a class="code" href="classost_1_1_posix_thread.html#afa168ff1446785a43b1123703d999207" title="Delivers a Posix signal to the current thread.">signalThread</a>(<span class="keyword">this</span>, signo);};
<a name="l01682"></a>01682 
<a name="l01689"></a>01689         <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_posix_thread.html#a67e582aabcd65431a38ecc8cbf0af350" title="Install a signal handler for use by threads and the OnSignal() event notification...">sigInstall</a>(<span class="keywordtype">int</span> signo);
<a name="l01690"></a>01690 };
<a name="l01691"></a>01691 <span class="preprocessor">#endif</span>
<a name="l01692"></a>01692 <span class="preprocessor"></span>
<a name="l01707"></a><a class="code" href="classost_1_1_thread_key.html">01707</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> ThreadKey
<a name="l01708"></a>01708 {
<a name="l01709"></a>01709 <span class="keyword">private</span>:
<a name="l01710"></a>01710 <span class="preprocessor">#ifndef WIN32</span>
<a name="l01711"></a>01711 <span class="preprocessor"></span>        pthread_key_t key;
<a name="l01712"></a>01712         <span class="keyword">typedef</span> void (*TDestruct)(<span class="keywordtype">void</span>*);
<a name="l01713"></a><a class="code" href="classost_1_1_thread_key.html#ae3c1cdb20d70b22a5c0bf395614eefff">01713</a>         <span class="keyword">friend</span> <span class="keyword">class </span>ThreadImpl;
<a name="l01714"></a>01714         ThreadKey(TDestruct destruct);
<a name="l01715"></a>01715 <span class="preprocessor">#else</span>
<a name="l01716"></a>01716 <span class="preprocessor"></span>        DWORD   key;
<a name="l01717"></a>01717 <span class="preprocessor">#endif</span>
<a name="l01718"></a>01718 <span class="preprocessor"></span>
<a name="l01719"></a>01719 <span class="keyword">public</span>:
<a name="l01723"></a>01723         ThreadKey();
<a name="l01724"></a>01724 
<a name="l01728"></a>01728         <span class="keyword">virtual</span> ~ThreadKey();
<a name="l01729"></a>01729 
<a name="l01737"></a>01737         <span class="keywordtype">void</span> *getKey(<span class="keywordtype">void</span>);
<a name="l01738"></a>01738 
<a name="l01746"></a>01746         <span class="keywordtype">void</span> setKey(<span class="keywordtype">void</span> *);
<a name="l01747"></a>01747 };
<a name="l01748"></a>01748 
<a name="l01759"></a><a class="code" href="classost_1_1_timer_port.html">01759</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_timer_port.html" title="Timer ports are used to provide synchronized timing events when managed under a &amp;quot;service...">TimerPort</a>
<a name="l01760"></a>01760 {
<a name="l01761"></a>01761 <span class="preprocessor">#ifndef WIN32</span>
<a name="l01762"></a>01762 <span class="preprocessor"></span>        <span class="keyword">struct </span>timeval timer;
<a name="l01763"></a>01763 <span class="preprocessor">#else</span>
<a name="l01764"></a>01764 <span class="preprocessor"></span>        DWORD timer;
<a name="l01765"></a>01765 <span class="preprocessor">#endif</span>
<a name="l01766"></a>01766 <span class="preprocessor"></span>        <span class="keywordtype">bool</span> active;
<a name="l01767"></a>01767 
<a name="l01768"></a>01768 <span class="keyword">public</span>:
<a name="l01775"></a>01775         <a class="code" href="classost_1_1_timer_port.html" title="Timer ports are used to provide synchronized timing events when managed under a &amp;quot;service...">TimerPort</a>();
<a name="l01776"></a>01776 
<a name="l01785"></a>01785         <span class="keywordtype">void</span> setTimer(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0);
<a name="l01786"></a>01786 
<a name="l01796"></a>01796         <span class="keywordtype">void</span> incTimer(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout);
<a name="l01797"></a>01797 
<a name="l01807"></a>01807         <span class="keywordtype">void</span> decTimer(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout);
<a name="l01808"></a>01808 
<a name="l01813"></a>01813         <span class="keywordtype">void</span> sleepTimer(<span class="keywordtype">void</span>);
<a name="l01814"></a>01814 
<a name="l01820"></a>01820         <span class="keywordtype">void</span> endTimer(<span class="keywordtype">void</span>);
<a name="l01821"></a>01821 
<a name="l01833"></a>01833         <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> getTimer(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l01834"></a>01834 
<a name="l01844"></a>01844         <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> getElapsed(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l01845"></a>01845 };
<a name="l01846"></a>01846 
<a name="l01847"></a>01847 
<a name="l01848"></a>01848 
<a name="l01849"></a>01849 <span class="comment">// FIXME: not in win32 implementation</span>
<a name="l01850"></a>01850 <span class="preprocessor">#if !defined(WIN32)</span>
<a name="l01851"></a>01851 <span class="preprocessor"></span>
<a name="l01852"></a>01852 <span class="comment">// FIXME: private declaration ???</span>
<a name="l01853"></a>01853 <span class="keyword">struct  </span>timespec *<a class="code" href="namespaceost.html#a8fd139f80e945ac6d8cc53868cdacca6">getTimeout</a>(<span class="keyword">struct</span> timespec *spec, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout);
<a name="l01854"></a>01854 
<a name="l01855"></a>01855 <span class="preprocessor">#if !defined(__CYGWIN32__) &amp;&amp; !defined(__MINGW32__)</span>
<a name="l01856"></a>01856 <span class="preprocessor"></span><span class="keywordtype">void</span>    <a class="code" href="namespaceost.html#a24c7774639b3768bdd45b65a296f6369">wait</a>(<a class="code" href="namespaceost.html#a5dca865b107f598c88bd2106ea56c16e">signo_t</a> signo);
<a name="l01857"></a>01857 <span class="preprocessor">#endif</span>
<a name="l01858"></a>01858 <span class="preprocessor"></span>
<a name="l01859"></a>01859 <span class="preprocessor">#endif // !WIN32</span>
<a name="l01860"></a>01860 <span class="preprocessor"></span>
<a name="l01861"></a>01861 <span class="preprocessor">#ifdef USE_POLL</span>
<a name="l01862"></a>01862 <span class="preprocessor"></span>
<a name="l01870"></a>01870 <span class="keyword">class </span>Poller
<a name="l01871"></a>01871 {
<a name="l01872"></a>01872 <span class="keyword">private</span>:
<a name="l01873"></a>01873         <span class="keywordtype">int</span> nufds;
<a name="l01874"></a>01874         pollfd *ufds;
<a name="l01875"></a>01875 
<a name="l01876"></a>01876 <span class="keyword">public</span>:
<a name="l01877"></a>01877         Poller();
<a name="l01878"></a>01878 
<a name="l01879"></a>01879         <span class="keyword">virtual</span> ~Poller();
<a name="l01880"></a>01880 
<a name="l01888"></a>01888         pollfd *getList(<span class="keywordtype">int</span> cnt);
<a name="l01889"></a>01889 
<a name="l01895"></a>01895         <span class="keyword">inline</span>  pollfd *getList(<span class="keywordtype">void</span>)
<a name="l01896"></a>01896                 {<span class="keywordflow">return</span> ufds;};
<a name="l01897"></a>01897 };
<a name="l01898"></a>01898 <span class="preprocessor">#endif</span>
<a name="l01899"></a>01899 <span class="preprocessor"></span>
<a name="l01900"></a><a class="code" href="namespaceost.html#a99c7f7d02b00922b0f5ee62fc3bb75fd">01900</a> <span class="keyword">inline</span> Thread *<a class="code" href="namespaceost.html#a99c7f7d02b00922b0f5ee62fc3bb75fd">getThread</a>(<span class="keywordtype">void</span>)
<a name="l01901"></a>01901         {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_thread.html#aaad41a9f7962bdc3058a429df48246fd">Thread::get</a>();}
<a name="l01902"></a>01902 
<a name="l01932"></a><a class="code" href="classost_1_1_sys_time.html">01932</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_sys_time.html" title="This class is used to access non-reentrant date and time functions in the standard...">SysTime</a>
<a name="l01933"></a>01933 {
<a name="l01934"></a>01934 <span class="keyword">private</span>:
<a name="l01935"></a>01935                 <span class="keyword">static</span> <a class="code" href="classost_1_1_mutex.html" title="The Mutex class is used to protect a section of code so that at any given time only...">Mutex</a> timeLock;
<a name="l01936"></a>01936 
<a name="l01937"></a>01937 <span class="keyword">protected</span>:
<a name="l01938"></a><a class="code" href="classost_1_1_sys_time.html#a9c5b33e9cabc7f1510653dbd1f6eb0ae">01938</a>                 <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> lock(<span class="keywordtype">void</span>)
<a name="l01939"></a>01939                         {timeLock.enterMutex();}
<a name="l01940"></a>01940 
<a name="l01941"></a><a class="code" href="classost_1_1_sys_time.html#a0d75e27d952de65d6e46b38e57ba605d">01941</a>                 <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> unlock(<span class="keywordtype">void</span>)
<a name="l01942"></a>01942                         {timeLock.leaveMutex();}
<a name="l01943"></a>01943 
<a name="l01944"></a>01944 <span class="keyword">public</span>:
<a name="l01945"></a>01945         <span class="keyword">static</span> time_t getTime(time_t *tloc = NULL);
<a name="l01946"></a><a class="code" href="classost_1_1_sys_time.html#accb0dc3c9d64b224e47649211dbe7b64">01946</a>         <span class="keyword">static</span> time_t time(time_t *tloc)
<a name="l01947"></a>01947                         { <span class="keywordflow">return</span> getTime(tloc); };
<a name="l01948"></a>01948 
<a name="l01949"></a>01949         <span class="keyword">static</span> <span class="keywordtype">int</span> getTimeOfDay(<span class="keyword">struct</span> timeval *tp);
<a name="l01950"></a><a class="code" href="classost_1_1_sys_time.html#afc403fcaa5a8ebf81528a34e5d5a1fac">01950</a>         <span class="keyword">static</span> <span class="keywordtype">int</span> gettimeofday(<span class="keyword">struct</span> timeval *tp, <span class="keyword">struct</span> timezone *)
<a name="l01951"></a>01951                         { <span class="keywordflow">return</span> getTimeOfDay(tp); };
<a name="l01952"></a>01952 
<a name="l01953"></a>01953         <span class="keyword">static</span> <span class="keyword">struct </span>tm *getLocalTime(<span class="keyword">const</span> time_t *clock, <span class="keyword">struct</span> tm *result);
<a name="l01954"></a><a class="code" href="classost_1_1_sys_time.html#af4bd7e44705486a2f0cee2cb98b2f975">01954</a>         <span class="keyword">static</span> <span class="keyword">struct </span>tm *locatime(<span class="keyword">const</span> time_t *clock, <span class="keyword">struct</span> tm *result)
<a name="l01955"></a>01955                         { <span class="keywordflow">return</span> getLocalTime(clock, result); };
<a name="l01956"></a>01956 
<a name="l01957"></a>01957                 <span class="keyword">static</span> <span class="keyword">struct </span>tm *getGMTTime(<span class="keyword">const</span> time_t *clock, <span class="keyword">struct</span> tm *result);
<a name="l01958"></a><a class="code" href="classost_1_1_sys_time.html#a1852b1563a7b8f2b96ab75bafe3948eb">01958</a>                 <span class="keyword">static</span> <span class="keyword">struct </span>tm *gmtime(<span class="keyword">const</span> time_t *clock, <span class="keyword">struct</span> tm *result)
<a name="l01959"></a>01959                         { <span class="keywordflow">return</span> getGMTTime(clock, result);};
<a name="l01960"></a>01960 };
<a name="l01961"></a>01961 
<a name="l01962"></a>01962 <span class="preprocessor">#ifndef HAVE_LOCALTIME_R</span>
<a name="l01963"></a>01963 <span class="preprocessor"></span>
<a name="l01964"></a>01964 <span class="keyword">inline</span> <span class="keyword">struct </span>tm *localtime_r(<span class="keyword">const</span> time_t *t, <span class="keyword">struct</span> tm *b)
<a name="l01965"></a>01965         {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_sys_time.html#ac39180f2c7b282d0145134d14a288480">SysTime::getLocalTime</a>(t, b);};
<a name="l01966"></a>01966 <span class="keyword">inline</span> <span class="keywordtype">char</span> *ctime_r(<span class="keyword">const</span> time_t *t, <span class="keywordtype">char</span> *buf)
<a name="l01967"></a>01967         {<span class="keywordflow">return</span> ctime(t);};
<a name="l01968"></a>01968 <span class="keyword">inline</span> <span class="keyword">struct </span>tm *gmtime_r(<span class="keyword">const</span> time_t *t, <span class="keyword">struct</span> tm *b) \
<a name="l01969"></a>01969 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_sys_time.html#a0da1e5fefac7161a878daed011e79932">SysTime::getGMTTime</a>(t, b);};
<a name="l01970"></a>01970 <span class="keyword">inline</span> <span class="keywordtype">char</span> *asctime_r(<span class="keyword">const</span> <span class="keyword">struct</span> tm *tm, <span class="keywordtype">char</span> *b) \
<a name="l01971"></a>01971         {<span class="keywordflow">return</span> asctime(tm);};
<a name="l01972"></a>01972 
<a name="l01973"></a>01973 <span class="preprocessor">#endif</span>
<a name="l01974"></a>01974 <span class="preprocessor"></span>
<a name="l01975"></a>01975 <span class="preprocessor">#ifdef  CCXX_NAMESPACES</span>
<a name="l01976"></a>01976 <span class="preprocessor"></span>}
<a name="l01977"></a>01977 <span class="preprocessor">#endif</span>
<a name="l01978"></a>01978 <span class="preprocessor"></span>
<a name="l01979"></a>01979 <span class="preprocessor">#endif</span>
<a name="l01980"></a>01980 <span class="preprocessor"></span>
</pre></div></div>
<hr class="footer"/><address style="text-align: right;"><small>Generated on Fri Nov 12 09:55:46 2010 for GNU CommonC++ by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.3 </small></address>
</body>
</html>