Česky
Kamil Dudka

Share Library (C++)

File detail

Name:Downloadsharelib_8h-source.html [Download]
Location: sharelib > api
Size:115.2 KB
Last modification:2022-09-09 13:06

Source code

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>ShareLibrary: sharelib/sharelib.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.2 -->
<div class="tabs">
  <ul>
    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="modules.html"><span>Modules</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="pages.html"><span>Related&nbsp;Pages</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>sharelib/sharelib.h</h1><a href="sharelib_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SHARELIB_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SHARELIB_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00013"></a>00013 <span class="preprocessor">#ifdef _WIN32</span>
<a name="l00014"></a>00014 <span class="preprocessor"></span>  <span class="comment">// Export symbols to .dll while using MS C++ compiler</span>
<a name="l00015"></a>00015 <span class="preprocessor"># define SHARE_EXPORT __declspec(dllexport)</span>
<a name="l00016"></a>00016 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00017"></a>00017 <span class="preprocessor"></span>  <span class="comment">// There is no need to declare export on Linux</span>
<a name="l00018"></a><a class="code" href="sharelib_8h.html#b7233d110fa17b8069b9a9f14d91618f">00018</a> <span class="preprocessor"># define SHARE_EXPORT</span>
<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00020"></a>00020 <span class="preprocessor"></span>
<a name="l00021"></a>00021 <span class="preprocessor">#include &lt;new&gt;</span>            <span class="comment">// Import std::bad_alloc exception</span>
<a name="l00022"></a>00022 <span class="preprocessor">#include &lt;memory&gt;</span>         <span class="comment">// Import std::allocator</span>
<a name="l00023"></a>00023 <span class="preprocessor">#include &lt;iterator&gt;</span>       <span class="comment">// Import std::random_access_iterator_tag</span>
<a name="l00024"></a>00024 <span class="preprocessor">#include &lt;functional&gt;</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;stddef.h&gt;</span>       <span class="comment">// Import base set of system types (like size_t, ptrdiff_t, ...)</span>
<a name="l00026"></a>00026 
<a name="l00031"></a>00031 <span class="keyword">namespace </span>Share {
<a name="l00035"></a>00035   <span class="keyword">template</span> &lt;<span class="keywordtype">bool</span>&gt; <span class="keyword">struct </span>ERROR_CTAssert_failed__Unexpected_sizeof_char;
<a name="l00039"></a><a class="code" href="structShare_1_1ERROR__CTAssert__failed____Unexpected__sizeof__char_3_01true_01_4.html">00039</a>   <span class="keyword">template</span> &lt;&gt; <span class="keyword">struct </span>ERROR_CTAssert_failed__Unexpected_sizeof_char&lt;true&gt; { };
<a name="l00040"></a>00040 
<a name="l00045"></a><a class="code" href="classShare_1_1ShareException.html">00045</a>   <span class="keyword">class </span><a class="code" href="classShare_1_1ShareException.html" title="General exception carrying text message inside.">ShareException</a>: <span class="keyword">public</span> std::bad_alloc {
<a name="l00046"></a>00046     <span class="keyword">public</span>:
<a name="l00051"></a>00051       <a class="code" href="sharelib_8h.html#b7233d110fa17b8069b9a9f14d91618f">SHARE_EXPORT</a> <a class="code" href="classShare_1_1ShareException.html#63b3ef4fbb854739ac459cd9b6b89572">ShareException</a> (<span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classShare_1_1ShareException.html#8939897efc926a410104eaad414aa265">message</a>);
<a name="l00052"></a>00052 
<a name="l00056"></a>00056       <a class="code" href="sharelib_8h.html#b7233d110fa17b8069b9a9f14d91618f">SHARE_EXPORT</a> <a class="code" href="classShare_1_1ShareException.html#ec00ea544f4f50905392cd41c73d4ef9">~ShareException</a> () <span class="keywordflow">throw</span> ();
<a name="l00057"></a>00057 
<a name="l00061"></a>00061       <a class="code" href="sharelib_8h.html#b7233d110fa17b8069b9a9f14d91618f">SHARE_EXPORT</a> <a class="code" href="classShare_1_1ShareException.html#63b3ef4fbb854739ac459cd9b6b89572">ShareException</a> (<span class="keyword">const</span> ShareException &amp;);
<a name="l00062"></a>00062 
<a name="l00066"></a>00066       <a class="code" href="sharelib_8h.html#b7233d110fa17b8069b9a9f14d91618f">SHARE_EXPORT</a> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classShare_1_1ShareException.html#8939897efc926a410104eaad414aa265">message</a>() <span class="keyword">const</span>;
<a name="l00067"></a>00067 
<a name="l00068"></a>00068     <span class="keyword">private</span>:
<a name="l00069"></a>00069       <span class="keywordtype">void</span> operator= (<span class="keyword">const</span> ShareException &amp;);
<a name="l00070"></a>00070       <span class="keywordtype">char</span> *message_;
<a name="l00071"></a>00071   };
<a name="l00072"></a>00072 
<a name="l00079"></a><a class="code" href="classShare_1_1Relocator.html">00079</a>   <span class="keyword">class </span><a class="code" href="classShare_1_1Relocator.html" title="Class handling low-level pointer relocation.">Relocator</a> {
<a name="l00080"></a>00080     <span class="keyword">public</span>:
<a name="l00081"></a><a class="code" href="classShare_1_1Relocator.html#4e0817b0eed4be84240a32d79126dad2">00081</a>       <span class="keyword">typedef</span> <span class="keywordtype">void</span>* <a class="code" href="classShare_1_1Relocator.html#4e0817b0eed4be84240a32d79126dad2" title="Absolute pointer type.">absolute_pointer</a>;                 
<a name="l00082"></a><a class="code" href="classShare_1_1Relocator.html#e719462f9bf34c582f87e589456fe504">00082</a>       <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* <a class="code" href="classShare_1_1Relocator.html#e719462f9bf34c582f87e589456fe504" title="Absolute const pointer type.">absolute_const_pointer</a>;     
<a name="l00083"></a><a class="code" href="classShare_1_1Relocator.html#9ba6ccb87680e0d568d2999191523799">00083</a>       <span class="keyword">typedef</span> <span class="keywordtype">size_t</span> <a class="code" href="classShare_1_1Relocator.html#9ba6ccb87680e0d568d2999191523799" title="Relative pointer type.">relative_pointer</a>;                
<a name="l00084"></a><a class="code" href="classShare_1_1Relocator.html#2545bed5557043fa37bb13458bb566fd">00084</a>       <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> <a class="code" href="classShare_1_1Relocator.html#2545bed5557043fa37bb13458bb566fd" title="Relative const pointer type.">relative_const_pointer</a>;    
<a name="l00085"></a>00085 
<a name="l00092"></a><a class="code" href="classShare_1_1Relocator.html#04b4d3a78f7d96dea1aac5e83b5fadcc">00092</a>       <span class="keyword">static</span> <a class="code" href="classShare_1_1Relocator.html#9ba6ccb87680e0d568d2999191523799" title="Relative pointer type.">relative_pointer</a> <a class="code" href="classShare_1_1Relocator.html#04b4d3a78f7d96dea1aac5e83b5fadcc">absToRel</a> (<a class="code" href="classShare_1_1Relocator.html#4e0817b0eed4be84240a32d79126dad2" title="Absolute pointer type.">absolute_pointer</a> abs, <a class="code" href="classShare_1_1Relocator.html#4e0817b0eed4be84240a32d79126dad2" title="Absolute pointer type.">absolute_pointer</a> base) {
<a name="l00093"></a>00093         ERROR_CTAssert_failed__Unexpected_sizeof_char&lt;sizeof(char)==1&gt;();
<a name="l00094"></a>00094         <span class="keywordflow">return</span>
<a name="l00095"></a>00095           (abs) ?
<a name="l00096"></a>00096           <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span> *<span class="keyword">&gt;</span> (abs) - static_cast&lt;char *&gt; (base) :
<a name="l00097"></a>00097           0;
<a name="l00098"></a>00098        }
<a name="l00099"></a>00099 
<a name="l00104"></a><a class="code" href="classShare_1_1Relocator.html#834d9cbb7d3453e342558cacf8660434">00104</a>       <span class="keyword">static</span> <a class="code" href="classShare_1_1Relocator.html#2545bed5557043fa37bb13458bb566fd" title="Relative const pointer type.">relative_const_pointer</a> <a class="code" href="classShare_1_1Relocator.html#04b4d3a78f7d96dea1aac5e83b5fadcc">absToRel</a> (<a class="code" href="classShare_1_1Relocator.html#e719462f9bf34c582f87e589456fe504" title="Absolute const pointer type.">absolute_const_pointer</a> abs, <a class="code" href="classShare_1_1Relocator.html#4e0817b0eed4be84240a32d79126dad2" title="Absolute pointer type.">absolute_pointer</a> base) {
<a name="l00105"></a>00105         <span class="keywordflow">return</span> <a class="code" href="classShare_1_1Relocator.html#04b4d3a78f7d96dea1aac5e83b5fadcc">absToRel</a> (const_cast&lt;absolute_pointer&gt;(abs), base);
<a name="l00106"></a>00106       }
<a name="l00107"></a>00107 
<a name="l00114"></a><a class="code" href="classShare_1_1Relocator.html#1b9cecb68d4b2c6b5016ba04027b4a3c">00114</a>       <span class="keyword">static</span> <a class="code" href="classShare_1_1Relocator.html#4e0817b0eed4be84240a32d79126dad2" title="Absolute pointer type.">absolute_pointer</a> <a class="code" href="classShare_1_1Relocator.html#1b9cecb68d4b2c6b5016ba04027b4a3c">relToAbs</a> (<a class="code" href="classShare_1_1Relocator.html#9ba6ccb87680e0d568d2999191523799" title="Relative pointer type.">relative_pointer</a> rel, <a class="code" href="classShare_1_1Relocator.html#4e0817b0eed4be84240a32d79126dad2" title="Absolute pointer type.">absolute_pointer</a> base) {
<a name="l00115"></a>00115         ERROR_CTAssert_failed__Unexpected_sizeof_char&lt;sizeof(char)==1&gt;();
<a name="l00116"></a>00116         <span class="keywordflow">return</span>
<a name="l00117"></a>00117           (rel) ?
<a name="l00118"></a>00118           <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span> *<span class="keyword">&gt;</span> (base) + rel :
<a name="l00119"></a>00119           0;
<a name="l00120"></a>00120       }
<a name="l00121"></a>00121 
<a name="l00122"></a>00122     <span class="keyword">private</span>:
<a name="l00126"></a>00126       <a class="code" href="classShare_1_1Relocator.html" title="Class handling low-level pointer relocation.">Relocator</a> ();
<a name="l00127"></a>00127   };
<a name="l00128"></a>00128 
<a name="l00135"></a><a class="code" href="structShare_1_1TReference.html">00135</a>   <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">struct </span><a class="code" href="structShare_1_1TReference.html" title="Reference generic template.">TReference</a> {
<a name="l00136"></a><a class="code" href="structShare_1_1TReference.html#41f0b7b46c488255900f8bd1b8c760d9">00136</a>     <span class="keyword">typedef</span> T&amp; <a class="code" href="structShare_1_1TReference.html#41f0b7b46c488255900f8bd1b8c760d9" title="Reference type derived from template parameter.">reference</a>;                       
<a name="l00137"></a><a class="code" href="structShare_1_1TReference.html#5957d2b2b80025ef35c8bea9637c7755">00137</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T&amp; <a class="code" href="structShare_1_1TReference.html#5957d2b2b80025ef35c8bea9637c7755" title="Const reference type derived from template parameter.">const_reference</a>;           
<a name="l00138"></a>00138   };
<a name="l00139"></a>00139 
<a name="l00143"></a><a class="code" href="structShare_1_1TReference_3_01void_01_4.html">00143</a>   <span class="keyword">template</span> &lt;&gt; <span class="keyword">struct </span><a class="code" href="structShare_1_1TReference.html" title="Reference generic template.">TReference</a>&lt;void&gt; {
<a name="l00144"></a><a class="code" href="structShare_1_1TReference_3_01void_01_4.html#3a865fb5cffb1d8c90fbf43c2973fb1b">00144</a>     <span class="keyword">typedef</span> <span class="keywordtype">void</span> <a class="code" href="structShare_1_1TReference.html#41f0b7b46c488255900f8bd1b8c760d9" title="Reference type derived from template parameter.">reference</a>;                     
<a name="l00145"></a><a class="code" href="structShare_1_1TReference_3_01void_01_4.html#dea33a14055f38abb2577768c6c09512">00145</a>     <span class="keyword">typedef</span> <span class="keywordtype">void</span> <a class="code" href="structShare_1_1TReference.html#5957d2b2b80025ef35c8bea9637c7755" title="Const reference type derived from template parameter.">const_reference</a>;               
<a name="l00146"></a>00146   };
<a name="l00147"></a>00147 
<a name="l00151"></a><a class="code" href="structShare_1_1TReference_3_01const_01void_01_4.html">00151</a>   <span class="keyword">template</span> &lt;&gt; <span class="keyword">struct </span><a class="code" href="structShare_1_1TReference.html" title="Reference generic template.">TReference</a>&lt;const void&gt; {
<a name="l00152"></a><a class="code" href="structShare_1_1TReference_3_01const_01void_01_4.html#a1862b0f6ebbb140d3b44a1796afd799">00152</a>     <span class="keyword">typedef</span> <span class="keywordtype">void</span> <a class="code" href="structShare_1_1TReference.html#41f0b7b46c488255900f8bd1b8c760d9" title="Reference type derived from template parameter.">reference</a>;                     
<a name="l00153"></a><a class="code" href="structShare_1_1TReference_3_01const_01void_01_4.html#e3f2b869bd58e3d4c86d67b66c9feddb">00153</a>     <span class="keyword">typedef</span> <span class="keywordtype">void</span> <a class="code" href="structShare_1_1TReference.html#5957d2b2b80025ef35c8bea9637c7755" title="Const reference type derived from template parameter.">const_reference</a>;               
<a name="l00154"></a>00154   };
<a name="l00155"></a>00155 
<a name="l00162"></a><a class="code" href="structShare_1_1TVoidPointer.html">00162</a>   <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">struct </span><a class="code" href="structShare_1_1TVoidPointer.html" title="Void pointer generic template.">TVoidPointer</a> {
<a name="l00163"></a><a class="code" href="structShare_1_1TVoidPointer.html#fc2bedfb73cb7985dadefe2e0893c35c">00163</a>     <span class="keyword">typedef</span> <span class="keywordtype">void</span>* <a class="code" href="structShare_1_1TVoidPointer.html#fc2bedfb73cb7985dadefe2e0893c35c" title="void pointer type derived from template parameter">void_pointer</a>;                 
<a name="l00164"></a><a class="code" href="structShare_1_1TVoidPointer.html#660d0fe84cf4fad125739d3da443a7fe">00164</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* <a class="code" href="structShare_1_1TVoidPointer.html#660d0fe84cf4fad125739d3da443a7fe" title="const void pointer type derived from template parameter">const_void_pointer</a>;     
<a name="l00165"></a>00165   };
<a name="l00166"></a>00166 
<a name="l00170"></a><a class="code" href="structShare_1_1TVoidPointer_3_01const_01T_01_4.html">00170</a>   <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">struct </span><a class="code" href="structShare_1_1TVoidPointer.html" title="Void pointer generic template.">TVoidPointer</a>&lt;const T&gt; {
<a name="l00171"></a><a class="code" href="structShare_1_1TVoidPointer_3_01const_01T_01_4.html#c0ab0068ca6ceda2e3b7897c2390fafa">00171</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* <a class="code" href="structShare_1_1TVoidPointer.html#fc2bedfb73cb7985dadefe2e0893c35c" title="void pointer type derived from template parameter">void_pointer</a>;           
<a name="l00172"></a><a class="code" href="structShare_1_1TVoidPointer_3_01const_01T_01_4.html#a5d74c642206a84f35b7e17ff17a9d3f">00172</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* <a class="code" href="structShare_1_1TVoidPointer.html#660d0fe84cf4fad125739d3da443a7fe" title="const void pointer type derived from template parameter">const_void_pointer</a>;     
<a name="l00173"></a>00173   };
<a name="l00174"></a>00174 
<a name="l00175"></a>00175   <span class="keyword">class </span><a class="code" href="classShare_1_1SharedSegment.html" title="Platform independent shared segment representation.">SharedSegment</a>;          <span class="comment">// Platform-independent shared segment representation</span>
<a name="l00176"></a>00176   <span class="keyword">class </span><a class="code" href="classShare_1_1SegmentHeader.html" title="Object placed at begin of each shared segment.">SegmentHeader</a>;          <span class="comment">// Object placed at begin of each shared segment</span>
<a name="l00177"></a>00177 
<a name="l00184"></a><a class="code" href="classShare_1_1ShareManager.html">00184</a>   <span class="keyword">class </span><a class="code" href="classShare_1_1ShareManager.html" title="Gateway to shared segment">ShareManager</a> {
<a name="l00185"></a>00185     <span class="keyword">public</span>:
<a name="l00186"></a><a class="code" href="classShare_1_1ShareManager.html#8b0266089b4aade79d609281b12e11a9">00186</a>       <span class="keyword">typedef</span> <a class="code" href="classShare_1_1Relocator.html#9ba6ccb87680e0d568d2999191523799" title="Relative pointer type.">Relocator::relative_pointer</a> <a class="code" href="classShare_1_1ShareManager.html#8b0266089b4aade79d609281b12e11a9">relative_pointer</a>;               
<a name="l00187"></a><a class="code" href="classShare_1_1ShareManager.html#4f7d6c90b91abb9b8671897556189151">00187</a>       <span class="keyword">typedef</span> <a class="code" href="classShare_1_1Relocator.html#2545bed5557043fa37bb13458bb566fd" title="Relative const pointer type.">Relocator::relative_const_pointer</a> <a class="code" href="classShare_1_1ShareManager.html#4f7d6c90b91abb9b8671897556189151">relative_const_pointer</a>;   
<a name="l00188"></a>00188 
<a name="l00194"></a>00194       <a class="code" href="sharelib_8h.html#b7233d110fa17b8069b9a9f14d91618f">SHARE_EXPORT</a> <span class="keyword">static</span> <a class="code" href="classShare_1_1ShareManager.html" title="Gateway to shared segment">ShareManager</a>* <a class="code" href="classShare_1_1ShareManager.html#9a3f4b7db3b1e9150b3288e7ff5d996a">instance</a>();
<a name="l00195"></a>00195 
<a name="l00200"></a>00200       <a class="code" href="sharelib_8h.html#b7233d110fa17b8069b9a9f14d91618f">SHARE_EXPORT</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classShare_1_1ShareManager.html#ee712ba09581e66196c457e7511d5627">destroySelf</a>();
<a name="l00201"></a>00201 
<a name="l00209"></a>00209       <a class="code" href="sharelib_8h.html#b7233d110fa17b8069b9a9f14d91618f">SHARE_EXPORT</a> <span class="keywordtype">void</span> <a class="code" href="classShare_1_1ShareManager.html#50cbcb66cef0716537637a358c76b58f" title="Create and attach segment">createSegment</a> (<span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classShare_1_1ShareManager.html#17eb0fa3e78452865e416b3f0906f438" title="Name of attached shared segment.">name</a>, <span class="keywordtype">size_t</span> size) <span class="keywordflow">throw</span> (<a class="code" href="classShare_1_1ShareException.html" title="General exception carrying text message inside.">ShareException</a>);
<a name="l00210"></a>00210 
<a name="l00218"></a>00218       <a class="code" href="sharelib_8h.html#b7233d110fa17b8069b9a9f14d91618f">SHARE_EXPORT</a> <span class="keywordtype">void</span> <a class="code" href="classShare_1_1ShareManager.html#41a8a750e27579c97c5da0ec2a27d4ce" title="Attach an already existing shared segment.">attachSegment</a> (<span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classShare_1_1ShareManager.html#17eb0fa3e78452865e416b3f0906f438" title="Name of attached shared segment.">name</a>) <span class="keywordflow">throw</span> (<a class="code" href="classShare_1_1ShareException.html" title="General exception carrying text message inside.">ShareException</a>);
<a name="l00219"></a>00219 
<a name="l00224"></a>00224       <a class="code" href="sharelib_8h.html#b7233d110fa17b8069b9a9f14d91618f">SHARE_EXPORT</a> <span class="keywordtype">void</span> <a class="code" href="classShare_1_1ShareManager.html#26096a2a299b116672287b18b4a45492" title="Detach from shared segment.">detachSegment</a> () throw ();
<a name="l00225"></a>00225 
<a name="l00232"></a>00232       <a class="code" href="sharelib_8h.html#b7233d110fa17b8069b9a9f14d91618f">SHARE_EXPORT</a> <span class="keywordtype">void</span> <a class="code" href="classShare_1_1ShareManager.html#2b223d2d0eddc4a5f8b2f2cf05512aca" title="Mark shared segment to be destroyed.">unlinkSegment</a> () throw ();
<a name="l00233"></a>00233 
<a name="l00238"></a>00238       <a class="code" href="sharelib_8h.html#b7233d110fa17b8069b9a9f14d91618f">SHARE_EXPORT</a> const <span class="keywordtype">char</span>* <a class="code" href="classShare_1_1ShareManager.html#17eb0fa3e78452865e416b3f0906f438" title="Name of attached shared segment.">name</a> ();
<a name="l00239"></a>00239 
<a name="l00245"></a><a class="code" href="classShare_1_1ShareManager.html#0d6637ca6064bc7f9c6fb8aaa84db33f">00245</a>       <a class="code" href="classShare_1_1ShareManager.html#8b0266089b4aade79d609281b12e11a9">relative_pointer</a> <a class="code" href="classShare_1_1ShareManager.html#0d6637ca6064bc7f9c6fb8aaa84db33f">absToRel</a> (<span class="keywordtype">void</span> *abs) {
<a name="l00246"></a>00246         <span class="keywordflow">return</span> <a class="code" href="classShare_1_1Relocator.html#04b4d3a78f7d96dea1aac5e83b5fadcc">Relocator::absToRel</a> (abs, atAddr_);
<a name="l00247"></a>00247       }
<a name="l00248"></a>00248 
<a name="l00252"></a><a class="code" href="classShare_1_1ShareManager.html#26548899ff80401f2350f6925150c560">00252</a>       <a class="code" href="classShare_1_1ShareManager.html#4f7d6c90b91abb9b8671897556189151">relative_const_pointer</a> <a class="code" href="classShare_1_1ShareManager.html#0d6637ca6064bc7f9c6fb8aaa84db33f">absToRel</a> (<span class="keyword">const</span> <span class="keywordtype">void</span> *abs) {
<a name="l00253"></a>00253         <span class="keywordflow">return</span> <a class="code" href="classShare_1_1Relocator.html#04b4d3a78f7d96dea1aac5e83b5fadcc">Relocator::absToRel</a> (abs, atAddr_);
<a name="l00254"></a>00254       }
<a name="l00255"></a>00255 
<a name="l00259"></a><a class="code" href="classShare_1_1ShareManager.html#4f8238efa8b89e3bc8fef8f2c6eb85b3">00259</a>       <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <a class="code" href="classShare_1_1ShareManager.html#8b0266089b4aade79d609281b12e11a9">relative_pointer</a> <a class="code" href="classShare_1_1ShareManager.html#0d6637ca6064bc7f9c6fb8aaa84db33f">absToRel</a> (T *abs) {
<a name="l00260"></a>00260         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structShare_1_1TVoidPointer.html" title="Void pointer generic template.">TVoidPointer&lt;T&gt;::void_pointer</a> void_pointer;
<a name="l00261"></a>00261         <span class="keywordflow">return</span> <a class="code" href="classShare_1_1ShareManager.html#0d6637ca6064bc7f9c6fb8aaa84db33f">absToRel</a>(static_cast&lt;void_pointer&gt; (abs));
<a name="l00262"></a>00262       }
<a name="l00263"></a>00263 
<a name="l00269"></a><a class="code" href="classShare_1_1ShareManager.html#8b7e541345245e103e226eea0a92a8a3">00269</a>       <span class="keywordtype">void</span>* <a class="code" href="classShare_1_1ShareManager.html#8b7e541345245e103e226eea0a92a8a3">relToAbs</a> (<a class="code" href="classShare_1_1ShareManager.html#8b0266089b4aade79d609281b12e11a9">relative_pointer</a> rel) {
<a name="l00270"></a>00270         <span class="keywordflow">return</span> <a class="code" href="classShare_1_1Relocator.html#1b9cecb68d4b2c6b5016ba04027b4a3c">Relocator::relToAbs</a> (rel, atAddr_);
<a name="l00271"></a>00271       }
<a name="l00272"></a>00272 
<a name="l00279"></a>00279       <a class="code" href="sharelib_8h.html#b7233d110fa17b8069b9a9f14d91618f">SHARE_EXPORT</a> <span class="keywordtype">void</span>* <a class="code" href="classShare_1_1ShareManager.html#da0976ebcacf446e71973f1b3d491f94">alloc</a> (<span class="keywordtype">size_t</span> size) <span class="keywordflow">throw</span> (<a class="code" href="classShare_1_1ShareException.html" title="General exception carrying text message inside.">ShareException</a>);
<a name="l00280"></a>00280 
<a name="l00286"></a><a class="code" href="classShare_1_1ShareManager.html#e4f9cc62ca2b9ae7dda303923e4fb93a">00286</a>       <span class="keywordtype">void</span>* <a class="code" href="classShare_1_1ShareManager.html#da0976ebcacf446e71973f1b3d491f94">alloc</a> (<span class="keywordtype">size_t</span> size, <span class="keywordtype">size_t</span> count) <span class="keywordflow">throw</span> (<a class="code" href="classShare_1_1ShareException.html" title="General exception carrying text message inside.">ShareException</a>) {
<a name="l00287"></a>00287         <span class="keywordflow">return</span> this-&gt; <a class="code" href="classShare_1_1ShareManager.html#da0976ebcacf446e71973f1b3d491f94">alloc</a> (size * count);
<a name="l00288"></a>00288       }
<a name="l00289"></a>00289 
<a name="l00295"></a>00295       <a class="code" href="sharelib_8h.html#b7233d110fa17b8069b9a9f14d91618f">SHARE_EXPORT</a> <span class="keywordtype">void</span> <a class="code" href="classShare_1_1ShareManager.html#c6701e530bd30472217d6d1b7581f5fa">free</a> (<span class="keywordtype">void</span> *addr) <span class="keywordflow">throw</span> ();
<a name="l00296"></a>00296 
<a name="l00301"></a><a class="code" href="classShare_1_1ShareManager.html#0150f4da112f1d673dc417744f7ed06b">00301</a>       <span class="keywordtype">void</span> <a class="code" href="classShare_1_1ShareManager.html#c6701e530bd30472217d6d1b7581f5fa">free</a> (<span class="keywordtype">void</span> *addr, <span class="keywordtype">size_t</span>) throw () {
<a name="l00302"></a>00302         this-&gt; <a class="code" href="classShare_1_1ShareManager.html#c6701e530bd30472217d6d1b7581f5fa">free</a> (addr);
<a name="l00303"></a>00303       }
<a name="l00304"></a>00304 
<a name="l00308"></a>00308       <a class="code" href="sharelib_8h.html#b7233d110fa17b8069b9a9f14d91618f">SHARE_EXPORT</a> <span class="keywordtype">size_t</span> <a class="code" href="classShare_1_1ShareManager.html#6a48b6c5cacc8ac461ad7ad1d2f77a6e">available</a> ();
<a name="l00309"></a>00309 
<a name="l00310"></a>00310     <span class="keyword">protected</span>:
<a name="l00316"></a>00316       <a class="code" href="sharelib_8h.html#b7233d110fa17b8069b9a9f14d91618f">SHARE_EXPORT</a> <span class="keywordtype">void</span> <a class="code" href="group__sharectl.html#gd3ef2512b0836d9e479bc6a2b78fccaa" title="Initialize ShareManager for debuging.">initDebugMode</a> (<a class="code" href="classShare_1_1SharedSegment.html" title="Platform independent shared segment representation.">SharedSegment</a> *segment);
<a name="l00317"></a>00317 
<a name="l00322"></a>00322       <a class="code" href="sharelib_8h.html#b7233d110fa17b8069b9a9f14d91618f">SHARE_EXPORT</a> <span class="keywordtype">void</span> <a class="code" href="group__sharectl.html#g89b04983af322afc2c8fb1dafdcd3015" title="Destroy current shared segment immediately.">destroySegment</a> ();
<a name="l00323"></a>00323 
<a name="l00327"></a><a class="code" href="classShare_1_1ShareManager.html#c5b65777a7325ee7b6dd639a05ad0014">00327</a>       <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classShare_1_1SharedSegmentWrapper.html" title="Wrapper around SharedSegment class for sharectl.">SharedSegmentWrapper</a>;
<a name="l00328"></a>00328 
<a name="l00329"></a>00329     <span class="keyword">private</span>:
<a name="l00330"></a>00330       <span class="keyword">static</span> <a class="code" href="classShare_1_1ShareManager.html" title="Gateway to shared segment">ShareManager</a> *instance_;                   
<a name="l00331"></a>00331       <a class="code" href="classShare_1_1SharedSegment.html" title="Platform independent shared segment representation.">SharedSegment</a> *segment_;                          
<a name="l00332"></a>00332       <a class="code" href="classShare_1_1SegmentHeader.html" title="Object placed at begin of each shared segment.">SegmentHeader</a> *atAddr_;                           
<a name="l00333"></a>00333 
<a name="l00334"></a>00334     <span class="keyword">private</span>:
<a name="l00335"></a>00335       <a class="code" href="classShare_1_1ShareManager.html" title="Gateway to shared segment">ShareManager</a> ();
<a name="l00336"></a>00336       ~<a class="code" href="classShare_1_1ShareManager.html" title="Gateway to shared segment">ShareManager</a> ();
<a name="l00337"></a>00337       <a class="code" href="classShare_1_1ShareManager.html" title="Gateway to shared segment">ShareManager</a> (<span class="keyword">const</span> <a class="code" href="classShare_1_1ShareManager.html" title="Gateway to shared segment">ShareManager</a>&amp;);               
<a name="l00338"></a>00338       <a class="code" href="classShare_1_1ShareManager.html" title="Gateway to shared segment">ShareManager</a>&amp; operator= (<span class="keyword">const</span> <a class="code" href="classShare_1_1ShareManager.html" title="Gateway to shared segment">ShareManager</a>&amp;);    
<a name="l00339"></a>00339   };
<a name="l00340"></a>00340 
<a name="l00346"></a><a class="code" href="classShare_1_1SharedObject.html">00346</a>   <span class="keyword">class </span><a class="code" href="classShare_1_1SharedObject.html" title="Shareable object base class.">SharedObject</a> {
<a name="l00347"></a>00347   <span class="keyword">public</span>:
<a name="l00352"></a><a class="code" href="classShare_1_1SharedObject.html#9904976649f43ebff33161352f1a2bb6">00352</a>     <span class="keyword">static</span> <span class="keywordtype">void</span>* <a class="code" href="classShare_1_1SharedObject.html#9904976649f43ebff33161352f1a2bb6">operator new </a>(<span class="keywordtype">size_t</span> size) <span class="keywordflow">throw</span> (<a class="code" href="classShare_1_1ShareException.html" title="General exception carrying text message inside.">ShareException</a>)
<a name="l00353"></a>00353     {
<a name="l00354"></a>00354       <span class="keywordflow">return</span> <a class="code" href="classShare_1_1SharedObject.html#9cbd4718acbcf4acfb0200da53dd901b">alloc</a>(size);
<a name="l00355"></a>00355     }
<a name="l00356"></a>00356 
<a name="l00361"></a><a class="code" href="classShare_1_1SharedObject.html#a17cf35fdefcbf1f0e3839d7ee420cd4">00361</a>     <span class="keyword">static</span> <span class="keywordtype">void</span>* <a class="code" href="classShare_1_1SharedObject.html#a17cf35fdefcbf1f0e3839d7ee420cd4">operator new[] </a>(<span class="keywordtype">size_t</span> size) <span class="keywordflow">throw</span> (<a class="code" href="classShare_1_1ShareException.html" title="General exception carrying text message inside.">ShareException</a>)
<a name="l00362"></a>00362     {
<a name="l00363"></a>00363       <span class="keywordflow">return</span> <a class="code" href="classShare_1_1SharedObject.html#9cbd4718acbcf4acfb0200da53dd901b">alloc</a>(size);
<a name="l00364"></a>00364     }
<a name="l00365"></a>00365 
<a name="l00369"></a><a class="code" href="classShare_1_1SharedObject.html#2d2cb37fccdfd8e577aa30de9cd93716">00369</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classShare_1_1SharedObject.html#2d2cb37fccdfd8e577aa30de9cd93716">operator delete </a>(<span class="keywordtype">void</span> *addr, <span class="keywordtype">size_t</span>) throw ()
<a name="l00370"></a>00370     {
<a name="l00371"></a>00371       <a class="code" href="classShare_1_1SharedObject.html#e3d21ebb81a40f59799c320bbf61cae2">free</a> (addr);
<a name="l00372"></a>00372     }
<a name="l00373"></a>00373 
<a name="l00377"></a><a class="code" href="classShare_1_1SharedObject.html#187eca9cef72c40f92d3191f203a342f">00377</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classShare_1_1SharedObject.html#187eca9cef72c40f92d3191f203a342f">operator delete[] </a>(<span class="keywordtype">void</span> *addr, <span class="keywordtype">size_t</span>) throw()
<a name="l00378"></a>00378     {
<a name="l00379"></a>00379       <a class="code" href="classShare_1_1SharedObject.html#e3d21ebb81a40f59799c320bbf61cae2">free</a> (addr);
<a name="l00380"></a>00380     }
<a name="l00381"></a>00381 
<a name="l00388"></a><a class="code" href="classShare_1_1SharedObject.html#9cbd4718acbcf4acfb0200da53dd901b">00388</a>     <span class="keyword">static</span> <span class="keywordtype">void</span>* <a class="code" href="classShare_1_1SharedObject.html#9cbd4718acbcf4acfb0200da53dd901b">alloc</a> (<span class="keywordtype">size_t</span> size) <span class="keywordflow">throw</span> (<a class="code" href="classShare_1_1ShareException.html" title="General exception carrying text message inside.">ShareException</a>)
<a name="l00389"></a>00389     {
<a name="l00390"></a>00390       <span class="keywordflow">return</span> <a class="code" href="classShare_1_1ShareManager.html#9a3f4b7db3b1e9150b3288e7ff5d996a">ShareManager::instance</a>()-&gt; <a class="code" href="classShare_1_1SharedObject.html#9cbd4718acbcf4acfb0200da53dd901b">alloc</a> (size);
<a name="l00391"></a>00391     }
<a name="l00392"></a>00392 
<a name="l00398"></a><a class="code" href="classShare_1_1SharedObject.html#c701f606810daf91df59ca8c2d296aa9">00398</a>     <span class="keyword">static</span> <span class="keywordtype">void</span>* <a class="code" href="classShare_1_1SharedObject.html#9cbd4718acbcf4acfb0200da53dd901b">alloc</a> (<span class="keywordtype">size_t</span> size, <span class="keywordtype">size_t</span> count) <span class="keywordflow">throw</span> (<a class="code" href="classShare_1_1ShareException.html" title="General exception carrying text message inside.">ShareException</a>) {
<a name="l00399"></a>00399       <span class="keywordflow">return</span> <a class="code" href="classShare_1_1SharedObject.html#9cbd4718acbcf4acfb0200da53dd901b">alloc</a> (size * count);
<a name="l00400"></a>00400     }
<a name="l00401"></a>00401 
<a name="l00407"></a><a class="code" href="classShare_1_1SharedObject.html#e3d21ebb81a40f59799c320bbf61cae2">00407</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classShare_1_1SharedObject.html#e3d21ebb81a40f59799c320bbf61cae2">free</a> (<span class="keywordtype">void</span> *addr) <span class="keywordflow">throw</span> ()
<a name="l00408"></a>00408     {
<a name="l00409"></a>00409       <a class="code" href="classShare_1_1ShareManager.html#9a3f4b7db3b1e9150b3288e7ff5d996a">ShareManager::instance</a>()-&gt; <a class="code" href="classShare_1_1SharedObject.html#e3d21ebb81a40f59799c320bbf61cae2">free</a> (addr);
<a name="l00410"></a>00410     }
<a name="l00411"></a>00411 
<a name="l00412"></a>00412   <span class="keyword">protected</span>:
<a name="l00413"></a><a class="code" href="classShare_1_1SharedObject.html#a1e9b0abd3f83edf7144258bcf199e8c">00413</a>     <a class="code" href="classShare_1_1SharedObject.html#a1e9b0abd3f83edf7144258bcf199e8c" title="This is base class only and could not be instantiated direct.">SharedObject</a> () { }           
<a name="l00414"></a><a class="code" href="classShare_1_1SharedObject.html#4bbc5942b4cb3e2a8f9b79732fe939eb">00414</a>     <a class="code" href="classShare_1_1SharedObject.html#4bbc5942b4cb3e2a8f9b79732fe939eb" title="This is base class only and could not be deleted direct.">~SharedObject</a> () { }          
<a name="l00415"></a>00415   };
<a name="l00416"></a>00416 
<a name="l00422"></a><a class="code" href="classShare_1_1RelocPtr.html">00422</a>   <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">class </span><a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr</a>: <span class="keyword">public</span> <a class="code" href="classShare_1_1SharedObject.html" title="Shareable object base class.">SharedObject</a> {
<a name="l00423"></a>00423     <span class="keyword">public</span>:
<a name="l00424"></a><a class="code" href="classShare_1_1RelocPtr.html#aba42401e75227f7bd93152000d12fa8">00424</a>       <span class="keyword">typedef</span> T <a class="code" href="classShare_1_1RelocPtr.html#aba42401e75227f7bd93152000d12fa8">value_type</a>;
<a name="l00425"></a><a class="code" href="classShare_1_1RelocPtr.html#cb1688001f5bb92b00ecd5dba54673a8">00425</a>       <span class="keyword">typedef</span> <span class="keywordtype">size_t</span> <a class="code" href="classShare_1_1RelocPtr.html#cb1688001f5bb92b00ecd5dba54673a8">size_type</a>;
<a name="l00426"></a><a class="code" href="classShare_1_1RelocPtr.html#3be3a8ae932dd1c441d5267dbfe4e4f9">00426</a>       <span class="keyword">typedef</span> ptrdiff_t <a class="code" href="classShare_1_1RelocPtr.html#3be3a8ae932dd1c441d5267dbfe4e4f9">difference_type</a>;
<a name="l00427"></a><a class="code" href="classShare_1_1RelocPtr.html#69b5a6923a000843700694fe789d0f28">00427</a>       <span class="keyword">typedef</span> T* <a class="code" href="classShare_1_1RelocPtr.html#69b5a6923a000843700694fe789d0f28">pointer</a>;
<a name="l00428"></a><a class="code" href="classShare_1_1RelocPtr.html#bde406e9ff03aa165a135828ec52e221">00428</a>       <span class="keyword">typedef</span> <span class="keyword">const</span> T* <a class="code" href="classShare_1_1RelocPtr.html#bde406e9ff03aa165a135828ec52e221">const_pointer</a>;
<a name="l00429"></a><a class="code" href="classShare_1_1RelocPtr.html#a4a5ced1a749cd94c87d4e6e34839470">00429</a>       <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structShare_1_1TVoidPointer.html" title="Void pointer generic template.">TVoidPointer&lt;T&gt;::void_pointer</a> <a class="code" href="classShare_1_1RelocPtr.html#a4a5ced1a749cd94c87d4e6e34839470">void_pointer</a>;                  
<a name="l00430"></a><a class="code" href="classShare_1_1RelocPtr.html#dcdbc046f89ffaed230b90997e510cdf">00430</a>       <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structShare_1_1TVoidPointer.html" title="Void pointer generic template.">TVoidPointer&lt;T&gt;::const_void_pointer</a> <a class="code" href="classShare_1_1RelocPtr.html#dcdbc046f89ffaed230b90997e510cdf">const_void_pointer</a>;      
<a name="l00431"></a><a class="code" href="classShare_1_1RelocPtr.html#6213f8eb9c44c3da5adcf58519409b0a">00431</a>       <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structShare_1_1TReference.html" title="Reference generic template.">TReference&lt;T&gt;::reference</a> <a class="code" href="classShare_1_1RelocPtr.html#6213f8eb9c44c3da5adcf58519409b0a">reference</a>;                          
<a name="l00432"></a><a class="code" href="classShare_1_1RelocPtr.html#0b7423aa548f1f6ca909804110d71502">00432</a>       <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structShare_1_1TReference.html" title="Reference generic template.">TReference&lt;T&gt;::const_reference</a> <a class="code" href="classShare_1_1RelocPtr.html#0b7423aa548f1f6ca909804110d71502">const_reference</a>;              
<a name="l00433"></a><a class="code" href="classShare_1_1RelocPtr.html#ead37d6700e2c7563388efddd0bccd95">00433</a>       <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classShare_1_1Relocator.html#9ba6ccb87680e0d568d2999191523799" title="Relative pointer type.">Relocator::relative_pointer</a> <a class="code" href="classShare_1_1RelocPtr.html#ead37d6700e2c7563388efddd0bccd95">relative_pointer</a>;                
<a name="l00434"></a><a class="code" href="classShare_1_1RelocPtr.html#3e44d26a099cb9791ee4f23ef4bb4272">00434</a>       <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classShare_1_1Relocator.html#2545bed5557043fa37bb13458bb566fd" title="Relative const pointer type.">Relocator::relative_const_pointer</a> <a class="code" href="classShare_1_1RelocPtr.html#3e44d26a099cb9791ee4f23ef4bb4272">relative_const_pointer</a>;    
<a name="l00435"></a>00435 
<a name="l00439"></a><a class="code" href="classShare_1_1RelocPtr.html#5b4e77ee40cf5449908a60c75bf95ad5">00439</a>       <span class="keyword">typedef</span> std::random_access_iterator_tag <a class="code" href="classShare_1_1RelocPtr.html#5b4e77ee40cf5449908a60c75bf95ad5" title="STL iterator category.">iterator_category</a>;
<a name="l00440"></a>00440 
<a name="l00444"></a><a class="code" href="classShare_1_1RelocPtr.html#90ce59bdd82de1e60925f1993bf884e5">00444</a>       <a class="code" href="classShare_1_1RelocPtr.html#90ce59bdd82de1e60925f1993bf884e5">RelocPtr</a> ():
<a name="l00445"></a>00445         rel_ (0)
<a name="l00446"></a>00446       {
<a name="l00447"></a>00447       }
<a name="l00448"></a>00448 
<a name="l00453"></a><a class="code" href="classShare_1_1RelocPtr.html#a2de8a45c6f22645d1e6464fb6f1f3eb">00453</a>       <a class="code" href="classShare_1_1RelocPtr.html#90ce59bdd82de1e60925f1993bf884e5">RelocPtr</a> (<a class="code" href="classShare_1_1RelocPtr.html#a4a5ced1a749cd94c87d4e6e34839470">void_pointer</a> abs):
<a name="l00454"></a>00454         rel_ (<a class="code" href="classShare_1_1ShareManager.html" title="Gateway to shared segment">ShareManager</a>::instance()-&gt; absToRel (abs))
<a name="l00455"></a>00455       {
<a name="l00456"></a>00456       }
<a name="l00457"></a>00457 
<a name="l00463"></a><a class="code" href="classShare_1_1RelocPtr.html#961fd4342f9ca6b7584ef5d2daccc08d">00463</a>       <a class="code" href="classShare_1_1RelocPtr.html#90ce59bdd82de1e60925f1993bf884e5">RelocPtr</a> (<a class="code" href="classShare_1_1RelocPtr.html#a4a5ced1a749cd94c87d4e6e34839470">void_pointer</a> abs, <span class="keywordtype">void</span> *base):
<a name="l00464"></a>00464         rel_ (<a class="code" href="classShare_1_1Relocator.html" title="Class handling low-level pointer relocation.">Relocator</a>::absToRel (abs, base))
<a name="l00465"></a>00465       {
<a name="l00466"></a>00466       }
<a name="l00467"></a>00467 
<a name="l00471"></a><a class="code" href="classShare_1_1RelocPtr.html#c6dd4b3f7f955dd74b9d19db4c86f217">00471</a>       <a class="code" href="classShare_1_1RelocPtr.html#90ce59bdd82de1e60925f1993bf884e5">RelocPtr</a> (<span class="keyword">const</span> <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr</a> &amp;src):
<a name="l00472"></a>00472         <a class="code" href="classShare_1_1SharedObject.html" title="Shareable object base class.">SharedObject</a>(),
<a name="l00473"></a>00473         rel_ (src.rel_)
<a name="l00474"></a>00474       {
<a name="l00475"></a>00475       }
<a name="l00476"></a>00476 
<a name="l00480"></a><a class="code" href="classShare_1_1RelocPtr.html#d4f8ead29bed4025ce7f36dad7265937">00480</a>       <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr</a>&amp; <a class="code" href="classShare_1_1RelocPtr.html#d4f8ead29bed4025ce7f36dad7265937">operator= </a>(<span class="keyword">const</span> <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr</a> &amp;src) {
<a name="l00481"></a>00481         rel_= src.<a class="code" href="classShare_1_1RelocPtr.html#5b4f6649720345798b19e62667df8af1" title="Internal pointer representation.">rel_</a>;
<a name="l00482"></a>00482         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00483"></a>00483       }
<a name="l00484"></a>00484 
<a name="l00488"></a><a class="code" href="classShare_1_1RelocPtr.html#dcc79de8edd9caa0b9ddf0581455b67c">00488</a>       <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr</a>&amp; <a class="code" href="classShare_1_1RelocPtr.html#d4f8ead29bed4025ce7f36dad7265937">operator= </a>(<a class="code" href="classShare_1_1RelocPtr.html#a4a5ced1a749cd94c87d4e6e34839470">void_pointer</a> abs) {
<a name="l00489"></a>00489         rel_= <a class="code" href="classShare_1_1ShareManager.html#9a3f4b7db3b1e9150b3288e7ff5d996a">ShareManager::instance</a>()-&gt; absToRel (abs);
<a name="l00490"></a>00490         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00491"></a>00491       }
<a name="l00492"></a>00492 
<a name="l00497"></a><a class="code" href="classShare_1_1RelocPtr.html#42e482608930555f9a1d1b0a886c5ea3">00497</a>       <a class="code" href="classShare_1_1RelocPtr.html#69b5a6923a000843700694fe789d0f28">pointer</a> <a class="code" href="classShare_1_1RelocPtr.html#42e482608930555f9a1d1b0a886c5ea3">operator-&gt; </a>()<span class="keyword"> const </span>{
<a name="l00498"></a>00498         <span class="keywordflow">return</span> static_cast &lt;T *&gt; (<a class="code" href="classShare_1_1ShareManager.html#9a3f4b7db3b1e9150b3288e7ff5d996a">ShareManager::instance</a>()-&gt; relToAbs (rel_));
<a name="l00499"></a>00499       }
<a name="l00500"></a>00500 
<a name="l00506"></a><a class="code" href="classShare_1_1RelocPtr.html#6feb652c014b72f91f4f1d2f96ca0834">00506</a>       <a class="code" href="classShare_1_1RelocPtr.html#6feb652c014b72f91f4f1d2f96ca0834" title="Implicit conversion to native pointer.">operator pointer </a>()<span class="keyword"> const </span>{
<a name="l00507"></a>00507         <span class="keywordflow">return</span> <a class="code" href="classShare_1_1RelocPtr.html#42e482608930555f9a1d1b0a886c5ea3">operator-&gt; </a>();
<a name="l00508"></a>00508       }
<a name="l00509"></a>00509 
<a name="l00514"></a><a class="code" href="classShare_1_1RelocPtr.html#f0112fb58cd3817e0c3075af761f19a1">00514</a>       <a class="code" href="classShare_1_1RelocPtr.html#6213f8eb9c44c3da5adcf58519409b0a">reference</a> <a class="code" href="classShare_1_1RelocPtr.html#f0112fb58cd3817e0c3075af761f19a1">operator[] </a>(<a class="code" href="classShare_1_1RelocPtr.html#cb1688001f5bb92b00ecd5dba54673a8">size_type</a> i) {
<a name="l00515"></a>00515         <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr&lt;T&gt;</a> tmp (*<span class="keyword">this</span>);
<a name="l00516"></a>00516         tmp+= i;
<a name="l00517"></a>00517         <span class="keywordflow">return</span> *(tmp.operator-&gt;());
<a name="l00518"></a>00518       }
<a name="l00519"></a>00519 
<a name="l00523"></a><a class="code" href="classShare_1_1RelocPtr.html#6f3b15854017b3e5ded3248fa34d6a53">00523</a>       <a class="code" href="classShare_1_1RelocPtr.html#ead37d6700e2c7563388efddd0bccd95">relative_pointer</a> <a class="code" href="classShare_1_1RelocPtr.html#6f3b15854017b3e5ded3248fa34d6a53" title="Export pointer to number">toRel</a> ()<span class="keyword"> const </span>{
<a name="l00524"></a>00524         <span class="keywordflow">return</span> rel_;
<a name="l00525"></a>00525       }
<a name="l00526"></a>00526 
<a name="l00530"></a><a class="code" href="classShare_1_1RelocPtr.html#5cd348dffb983437133bfca99e768c4f">00530</a>       <span class="keyword">static</span> <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr&lt;T&gt;</a> <a class="code" href="classShare_1_1RelocPtr.html#5cd348dffb983437133bfca99e768c4f" title="Import pointer from number">fromRel</a> (<a class="code" href="classShare_1_1RelocPtr.html#ead37d6700e2c7563388efddd0bccd95">relative_pointer</a> rel) {
<a name="l00531"></a>00531         <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr&lt;T&gt;</a> tmp;
<a name="l00532"></a>00532         tmp.<a class="code" href="classShare_1_1RelocPtr.html#5b4f6649720345798b19e62667df8af1" title="Internal pointer representation.">rel_</a>= rel;
<a name="l00533"></a>00533         <span class="keywordflow">return</span> tmp;
<a name="l00534"></a>00534       }
<a name="l00535"></a>00535 
<a name="l00539"></a><a class="code" href="classShare_1_1RelocPtr.html#8cc42a2423f811af1ead975ce0ee0fe1">00539</a>       <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr</a>&amp; <a class="code" href="classShare_1_1RelocPtr.html#8cc42a2423f811af1ead975ce0ee0fe1">operator++ </a>() {
<a name="l00540"></a>00540         rel_+= <span class="keyword">sizeof</span>(T);
<a name="l00541"></a>00541         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00542"></a>00542       }
<a name="l00546"></a><a class="code" href="classShare_1_1RelocPtr.html#6ce42d887d8e140826b458254a01d3a8">00546</a>       <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr</a>&amp; <a class="code" href="classShare_1_1RelocPtr.html#6ce42d887d8e140826b458254a01d3a8">operator-- </a>() {
<a name="l00547"></a>00547         rel_-= <span class="keyword">sizeof</span>(T);
<a name="l00548"></a>00548         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00549"></a>00549       }
<a name="l00550"></a>00550 
<a name="l00554"></a><a class="code" href="classShare_1_1RelocPtr.html#50c9dd25105613ed289e8f40699d9d3a">00554</a>       <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr</a>&amp; <a class="code" href="classShare_1_1RelocPtr.html#50c9dd25105613ed289e8f40699d9d3a">operator+= </a>(<a class="code" href="classShare_1_1RelocPtr.html#3be3a8ae932dd1c441d5267dbfe4e4f9">difference_type</a> count) {
<a name="l00555"></a>00555         rel_+= count * <span class="keyword">sizeof</span>(T);
<a name="l00556"></a>00556         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00557"></a>00557       }
<a name="l00558"></a>00558 
<a name="l00562"></a><a class="code" href="classShare_1_1RelocPtr.html#754cc0f6594130497ea2535432aceb53">00562</a>       <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr</a>&amp; <a class="code" href="classShare_1_1RelocPtr.html#754cc0f6594130497ea2535432aceb53">operator-= </a>(<a class="code" href="classShare_1_1RelocPtr.html#3be3a8ae932dd1c441d5267dbfe4e4f9">difference_type</a> count) {
<a name="l00563"></a>00563         rel_-= count * <span class="keyword">sizeof</span>(T);
<a name="l00564"></a>00564         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00565"></a>00565       }
<a name="l00566"></a>00566 
<a name="l00567"></a>00567     <span class="keyword">private</span>:
<a name="l00568"></a>00568       <a class="code" href="classShare_1_1RelocPtr.html#ead37d6700e2c7563388efddd0bccd95">relative_pointer</a> rel_;   
<a name="l00569"></a>00569   };
<a name="l00570"></a>00570 
<a name="l00574"></a><a class="code" href="namespaceShare.html#2c67551ac7826ef47d668ce199352c5e">00574</a>   <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr&lt;T&gt;</a> <a class="code" href="namespaceShare.html#2c67551ac7826ef47d668ce199352c5e" title="RelocPtr post-increment.">operator++ </a>(<a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr&lt;T&gt;</a> &amp;ptr, <span class="keywordtype">int</span>)
<a name="l00575"></a>00575   {
<a name="l00576"></a>00576     <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr&lt;T&gt;</a> tmp(ptr);
<a name="l00577"></a>00577     ++ptr;
<a name="l00578"></a>00578     <span class="keywordflow">return</span> tmp;
<a name="l00579"></a>00579   }
<a name="l00580"></a>00580 
<a name="l00584"></a><a class="code" href="namespaceShare.html#a8a74cce4979531d9e3f93261d7a5cca">00584</a>   <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr&lt;T&gt;</a> <a class="code" href="namespaceShare.html#a8a74cce4979531d9e3f93261d7a5cca" title="RelocPtr post-decrement.">operator-- </a>(<a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr&lt;T&gt;</a> &amp;ptr, <span class="keywordtype">int</span>)
<a name="l00585"></a>00585   {
<a name="l00586"></a>00586     <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr&lt;T&gt;</a> tmp(ptr);
<a name="l00587"></a>00587     --ptr;
<a name="l00588"></a>00588     <span class="keywordflow">return</span> tmp;
<a name="l00589"></a>00589   }
<a name="l00590"></a>00590 
<a name="l00594"></a><a class="code" href="namespaceShare.html#8191d227b863bbe0b6d2da2d629f1808">00594</a>   <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; ptrdiff_t <a class="code" href="namespaceShare.html#8191d227b863bbe0b6d2da2d629f1808" title="RelocPtr pointer difference.">operator- </a>(<a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr&lt;T&gt;</a> &amp;a, <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr&lt;T&gt;</a> &amp;b)
<a name="l00595"></a>00595   {
<a name="l00596"></a>00596     <span class="keywordflow">return</span> (a.<a class="code" href="classShare_1_1RelocPtr.html#6f3b15854017b3e5ded3248fa34d6a53" title="Export pointer to number">toRel</a>()-b.<a class="code" href="classShare_1_1RelocPtr.html#6f3b15854017b3e5ded3248fa34d6a53" title="Export pointer to number">toRel</a>())/<span class="keyword">sizeof</span>(T);
<a name="l00597"></a>00597   }
<a name="l00598"></a>00598 
<a name="l00602"></a><a class="code" href="namespaceShare.html#1c82c0dda2b2722c067805fe0c238a14">00602</a>   <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr&lt;T&gt;</a> <a class="code" href="namespaceShare.html#1c82c0dda2b2722c067805fe0c238a14" title="RelocPtr pointer arithmetic - go next N.">operator+ </a>(<a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr&lt;T&gt;</a> ptr, ptrdiff_t diff)
<a name="l00603"></a>00603   {
<a name="l00604"></a>00604     ptr+= diff;
<a name="l00605"></a>00605     <span class="keywordflow">return</span> ptr;
<a name="l00606"></a>00606   }
<a name="l00607"></a>00607 
<a name="l00611"></a><a class="code" href="namespaceShare.html#345aa93825282a7625288d64706f14e0">00611</a>   <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr&lt;T&gt;</a> <a class="code" href="namespaceShare.html#8191d227b863bbe0b6d2da2d629f1808" title="RelocPtr pointer difference.">operator- </a>(<a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr&lt;T&gt;</a> ptr, ptrdiff_t diff)
<a name="l00612"></a>00612   {
<a name="l00613"></a>00613     ptr-= diff;
<a name="l00614"></a>00614     <span class="keywordflow">return</span> ptr;
<a name="l00615"></a>00615   }
<a name="l00616"></a>00616 
<a name="l00623"></a><a class="code" href="classShare_1_1Allocator.html">00623</a>   <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">class </span><a class="code" href="classShare_1_1Allocator.html" title="STL allocator.">Allocator</a> {
<a name="l00624"></a>00624     <span class="keyword">public</span>:
<a name="l00625"></a><a class="code" href="classShare_1_1Allocator.html#d92b866508c2b7357e7df46e09176e06">00625</a>       <span class="keyword">typedef</span> T <a class="code" href="classShare_1_1Allocator.html#d92b866508c2b7357e7df46e09176e06">value_type</a>;
<a name="l00626"></a><a class="code" href="classShare_1_1Allocator.html#4c92efb25c8b5c5f9737ab9c63356d2e">00626</a>       <span class="keyword">typedef</span> <span class="keywordtype">size_t</span> <a class="code" href="classShare_1_1Allocator.html#4c92efb25c8b5c5f9737ab9c63356d2e">size_type</a>;
<a name="l00627"></a><a class="code" href="classShare_1_1Allocator.html#c1ad13ed53b1b0638c72feb18d9b5221">00627</a>       <span class="keyword">typedef</span> ptrdiff_t <a class="code" href="classShare_1_1Allocator.html#c1ad13ed53b1b0638c72feb18d9b5221">difference_type</a>;
<a name="l00628"></a><a class="code" href="classShare_1_1Allocator.html#53d8f322cdd50d6f32c92d29f0195844">00628</a>       <span class="keyword">typedef</span> <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr&lt;T&gt;</a> <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">pointer</a>;                
<a name="l00629"></a><a class="code" href="classShare_1_1Allocator.html#34253578a7bf8a2f2eea0a4f3f26c5c7">00629</a>       <span class="keyword">typedef</span> <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr&lt;const T&gt;</a> <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">const_pointer</a>;    
<a name="l00630"></a><a class="code" href="classShare_1_1Allocator.html#b1360b062643b86cd32d351f2ae6f196">00630</a>       <span class="keyword">typedef</span> T&amp; <a class="code" href="classShare_1_1Allocator.html#b1360b062643b86cd32d351f2ae6f196">reference</a>;
<a name="l00631"></a><a class="code" href="classShare_1_1Allocator.html#3840838adcc64b3a7587e78bc4ce12e9">00631</a>       <span class="keyword">typedef</span> <span class="keyword">const</span> T&amp; <a class="code" href="classShare_1_1Allocator.html#3840838adcc64b3a7587e78bc4ce12e9">const_reference</a>;
<a name="l00632"></a>00632 
<a name="l00636"></a><a class="code" href="classShare_1_1Allocator.html#d54ca56201109e53efb7ce51b75b8dc9">00636</a>       <a class="code" href="classShare_1_1Allocator.html#d54ca56201109e53efb7ce51b75b8dc9">Allocator</a>() throw() { }
<a name="l00637"></a>00637 
<a name="l00641"></a><a class="code" href="classShare_1_1Allocator.html#6a5cc12396fe1905f7f2143c86cb0cb6">00641</a>       <a class="code" href="classShare_1_1Allocator.html#6a5cc12396fe1905f7f2143c86cb0cb6">~Allocator</a>() throw() { }
<a name="l00642"></a>00642 
<a name="l00646"></a><a class="code" href="classShare_1_1Allocator.html#8b25e3004e922f2a6fb159adf5a867e5">00646</a>       <span class="keyword">template</span> &lt;<span class="keyword">class</span> U&gt; <a class="code" href="classShare_1_1Allocator.html#d54ca56201109e53efb7ce51b75b8dc9">Allocator</a> (<span class="keyword">const</span> <a class="code" href="classShare_1_1Allocator.html" title="STL allocator.">Allocator&lt;U&gt;</a>&amp;) throw() { }
<a name="l00647"></a>00647 
<a name="l00652"></a>00652       <span class="keyword">template</span> &lt;<span class="keyword">class</span> U&gt;
<a name="l00653"></a><a class="code" href="structShare_1_1Allocator_1_1rebind.html">00653</a>       <span class="keyword">struct </span><a class="code" href="structShare_1_1Allocator_1_1rebind.html" title="STL allocator type adapter template.">rebind</a> {
<a name="l00654"></a><a class="code" href="structShare_1_1Allocator_1_1rebind.html#2767540531dc84dd5cfb709bb5f1c0ac">00654</a>         <span class="keyword">typedef</span> <a class="code" href="classShare_1_1Allocator.html" title="STL allocator.">Allocator&lt;U&gt;</a> <a class="code" href="classShare_1_1Allocator.html" title="STL allocator.">other</a>;
<a name="l00655"></a>00655       };
<a name="l00656"></a>00656 
<a name="l00661"></a><a class="code" href="classShare_1_1Allocator.html#b92fa1e5c8c2e5b4bd32d6a5a03fae23">00661</a>       <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">pointer</a> <a class="code" href="classShare_1_1Allocator.html#b92fa1e5c8c2e5b4bd32d6a5a03fae23">address</a> (<a class="code" href="classShare_1_1Allocator.html#b1360b062643b86cd32d351f2ae6f196">reference</a> obj)<span class="keyword"> const </span>{
<a name="l00662"></a>00662         <span class="keywordflow">return</span> &amp;obj;
<a name="l00663"></a>00663       }
<a name="l00664"></a>00664 
<a name="l00669"></a><a class="code" href="classShare_1_1Allocator.html#41bc546b85862f4c7c3560772c94dc04">00669</a>       <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">const_pointer</a> <a class="code" href="classShare_1_1Allocator.html#b92fa1e5c8c2e5b4bd32d6a5a03fae23">address</a> (<a class="code" href="classShare_1_1Allocator.html#3840838adcc64b3a7587e78bc4ce12e9">const_reference</a> obj)<span class="keyword"> const </span>{
<a name="l00670"></a>00670         <span class="keywordflow">return</span> &amp;obj;
<a name="l00671"></a>00671       }
<a name="l00672"></a>00672 
<a name="l00678"></a><a class="code" href="classShare_1_1Allocator.html#c84a1c3f189f587e4f5a9eedb83161a5">00678</a>       <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">pointer</a> <a class="code" href="classShare_1_1Allocator.html#c84a1c3f189f587e4f5a9eedb83161a5">allocate</a> (<a class="code" href="classShare_1_1Allocator.html#4c92efb25c8b5c5f9737ab9c63356d2e">size_type</a> count) {
<a name="l00679"></a>00679         <span class="keywordflow">return</span> <a class="code" href="classShare_1_1Allocator.html#53d8f322cdd50d6f32c92d29f0195844" title="Using relocable pointer type.">pointer</a> (static_cast&lt;T*&gt;(<a class="code" href="classShare_1_1ShareManager.html#9a3f4b7db3b1e9150b3288e7ff5d996a">ShareManager::instance</a>()-&gt; alloc (<span class="keyword">sizeof</span>(T), count)));
<a name="l00680"></a>00680       }
<a name="l00681"></a>00681 
<a name="l00688"></a><a class="code" href="classShare_1_1Allocator.html#0bcd2325b9af3f78e5d89b2564cd47fb">00688</a>       <span class="keywordtype">void</span> <a class="code" href="classShare_1_1Allocator.html#0bcd2325b9af3f78e5d89b2564cd47fb">deallocate</a> (<a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">pointer</a> addr, <a class="code" href="classShare_1_1Allocator.html#4c92efb25c8b5c5f9737ab9c63356d2e">size_type</a> count) {
<a name="l00689"></a>00689         <a class="code" href="classShare_1_1ShareManager.html#9a3f4b7db3b1e9150b3288e7ff5d996a">ShareManager::instance</a>()-&gt; free (addr, count);
<a name="l00690"></a>00690       }
<a name="l00691"></a>00691 
<a name="l00692"></a><a class="code" href="classShare_1_1Allocator.html#d977928bef784f5ea173108ebfa4ae8a">00692</a>       <span class="keywordtype">void</span> <a class="code" href="classShare_1_1Allocator.html#d977928bef784f5ea173108ebfa4ae8a">construct</a> (<a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">pointer</a> p, <span class="keyword">const</span> T&amp; val) {
<a name="l00693"></a>00693         ::new(p) T(val);
<a name="l00694"></a>00694       }
<a name="l00695"></a>00695 
<a name="l00696"></a><a class="code" href="classShare_1_1Allocator.html#5f1b6a5bfe7697d30456b4fcddea3b84">00696</a>       <span class="keywordtype">void</span> <a class="code" href="classShare_1_1Allocator.html#5f1b6a5bfe7697d30456b4fcddea3b84">destroy</a> (<a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">pointer</a> p) {
<a name="l00697"></a>00697         p-&gt;~T();
<a name="l00698"></a>00698       }
<a name="l00699"></a>00699 
<a name="l00700"></a><a class="code" href="classShare_1_1Allocator.html#314a7ef788d6a58e18c4944fc8e72290">00700</a>       <a class="code" href="classShare_1_1Allocator.html#4c92efb25c8b5c5f9737ab9c63356d2e">size_type</a> <a class="code" href="classShare_1_1Allocator.html#314a7ef788d6a58e18c4944fc8e72290">max_size</a> () <span class="keyword">const</span> throw() {
<a name="l00701"></a>00701         <span class="keywordflow">return</span> 
<a name="l00702"></a>00702           (<a class="code" href="classShare_1_1ShareManager.html#9a3f4b7db3b1e9150b3288e7ff5d996a">ShareManager::instance</a>()-&gt; available())
<a name="l00703"></a>00703           /<span class="keyword">sizeof</span>(T);
<a name="l00704"></a>00704       }
<a name="l00705"></a>00705   };
<a name="l00706"></a><a class="code" href="namespaceShare.html#0a650e9c97529a25f3214449e90a4301">00706</a>   <span class="keyword">template</span> &lt;<span class="keyword">class</span> T1, <span class="keyword">class</span> T2&gt; <span class="keywordtype">bool</span> <a class="code" href="namespaceShare.html#0a650e9c97529a25f3214449e90a4301">operator== </a>(<span class="keyword">const</span> <a class="code" href="classShare_1_1Allocator.html" title="STL allocator.">Allocator&lt;T1&gt;</a>&amp;, <span class="keyword">const</span> <a class="code" href="classShare_1_1Allocator.html" title="STL allocator.">Allocator&lt;T2&gt;</a>&amp;) throw() { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
<a name="l00707"></a><a class="code" href="namespaceShare.html#2d307a00911813965db453dbde494d54">00707</a>   <span class="keyword">template</span> &lt;<span class="keyword">class</span> T1, <span class="keyword">class</span> T2&gt; <span class="keywordtype">bool</span> <a class="code" href="namespaceShare.html#2d307a00911813965db453dbde494d54">operator!= </a>(<span class="keyword">const</span> <a class="code" href="classShare_1_1Allocator.html" title="STL allocator.">Allocator&lt;T1&gt;</a>&amp;, <span class="keyword">const</span> <a class="code" href="classShare_1_1Allocator.html" title="STL allocator.">Allocator&lt;T2&gt;</a>&amp;) throw() { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
<a name="l00708"></a>00708 
<a name="l00709"></a>00709   <span class="comment">// Patch for Microsoft C++ compiler</span>
<a name="l00710"></a>00710 <span class="preprocessor">#ifdef _WIN32</span>
<a name="l00711"></a>00711 <span class="preprocessor"></span>  <span class="keyword">template</span> &lt;&gt; <span class="keywordtype">void</span> Allocator&lt;char&gt;::destroy(Allocator&lt;char&gt;::pointer) { }
<a name="l00712"></a>00712 <span class="preprocessor">#endif // _WIN32</span>
<a name="l00713"></a>00713 <span class="preprocessor"></span>
<a name="l00721"></a>00721   <span class="keyword">template</span> &lt;
<a name="l00722"></a>00722     <span class="keyword">class </span>TItem,
<a name="l00723"></a>00723     <span class="keyword">class </span>TAllocator = std::allocator&lt;TItem&gt;
<a name="l00724"></a>00724     &gt;
<a name="l00725"></a><a class="code" href="classShare_1_1Vector.html">00725</a>   <span class="keyword">class </span><a class="code" href="classShare_1_1Vector.html" title="STL vector.">Vector</a> {
<a name="l00729"></a>00729       <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> allocBase2Exp = 4;
<a name="l00730"></a>00730 
<a name="l00734"></a>00734       <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> allocDownFactor2Exp = 2;
<a name="l00735"></a>00735 
<a name="l00736"></a>00736       <span class="keyword">typedef</span> <span class="keyword">typename</span> TAllocator::size_type size_type;
<a name="l00737"></a>00737       <span class="keyword">typedef</span> <span class="keyword">typename</span> TAllocator::difference_type difference_type;
<a name="l00738"></a>00738       <span class="keyword">typedef</span> <span class="keyword">typename</span> TAllocator::pointer pointer;
<a name="l00739"></a>00739       <span class="keyword">typedef</span> <span class="keyword">typename</span> TAllocator::const_pointer const_pointer;
<a name="l00740"></a>00740       <span class="keyword">typedef</span> <span class="keyword">typename</span> TAllocator::reference reference;
<a name="l00741"></a>00741       <span class="keyword">typedef</span> <span class="keyword">typename</span> TAllocator::const_reference const_reference;
<a name="l00742"></a>00742 
<a name="l00743"></a>00743     <span class="keyword">public</span>:
<a name="l00744"></a><a class="code" href="classShare_1_1Vector.html#b9d9f9d53c0c2dcf941247d410f9cd2d">00744</a>       <span class="keyword">typedef</span> pointer iterator;                   
<a name="l00745"></a><a class="code" href="classShare_1_1Vector.html#9a8b2595b7badca4013f2f0e95861b73">00745</a>       <span class="keyword">typedef</span> const_pointer const_iterator;       
<a name="l00746"></a>00746 
<a name="l00750"></a><a class="code" href="classShare_1_1Vector.html#7567361a458ec22bd7fb8ab694fd1eb3">00750</a>       <a class="code" href="classShare_1_1Vector.html" title="STL vector.">Vector</a>():
<a name="l00751"></a>00751         size_ (0),
<a name="l00752"></a>00752         capacity_ (0),
<a name="l00753"></a>00753         data_ (0)
<a name="l00754"></a>00754       {
<a name="l00755"></a>00755         lowLevelResize(0);
<a name="l00756"></a>00756       }
<a name="l00757"></a>00757 
<a name="l00758"></a><a class="code" href="classShare_1_1Vector.html#aed4cfea5d9428c996791153a7efb570">00758</a>       <a class="code" href="classShare_1_1Vector.html" title="STL vector.">Vector</a> (size_type size):
<a name="l00759"></a>00759         size_ (0),
<a name="l00760"></a>00760         capacity_ (0),
<a name="l00761"></a>00761         data_ (0)
<a name="l00762"></a>00762       {
<a name="l00763"></a>00763         lowLevelResize(size);
<a name="l00764"></a>00764         size_ = size;
<a name="l00765"></a>00765       }
<a name="l00766"></a>00766 
<a name="l00770"></a><a class="code" href="classShare_1_1Vector.html#b172d45945e586645d94b02b8b5ebee4">00770</a>       <a class="code" href="classShare_1_1Vector.html" title="STL vector.">Vector</a> (<span class="keyword">const</span> <a class="code" href="classShare_1_1Vector.html" title="STL vector.">Vector</a> &amp;other):
<a name="l00771"></a>00771         size_ (0),
<a name="l00772"></a>00772         capacity_ (0),
<a name="l00773"></a>00773         data_ (0)
<a name="l00774"></a>00774       {
<a name="l00775"></a>00775         operator= (other);
<a name="l00776"></a>00776       }
<a name="l00777"></a>00777 
<a name="l00781"></a><a class="code" href="classShare_1_1Vector.html#7eaa0cc20ac28f11eb44035edc6457d9">00781</a>       <a class="code" href="classShare_1_1Vector.html" title="STL vector.">Vector</a>&amp; operator= (<span class="keyword">const</span> <a class="code" href="classShare_1_1Vector.html" title="STL vector.">Vector</a> &amp;other) {
<a name="l00782"></a>00782         size_type newSize = other.<a class="code" href="classShare_1_1Vector.html#a895ea1e82e41833f5251e941b5cb92f">size</a>();
<a name="l00783"></a>00783         lowLevelResize(newSize);
<a name="l00784"></a>00784         size_ = newSize;
<a name="l00785"></a>00785         TItem *s1 = begin();
<a name="l00786"></a>00786         <span class="keyword">const</span> TItem *s2 = other.<a class="code" href="classShare_1_1Vector.html#572d0a556e319f2dec7df9e4c752f2e3">begin</a>();
<a name="l00787"></a>00787         <span class="keyword">const</span> TItem *s2end = other.<a class="code" href="classShare_1_1Vector.html#109e9c1512370fd261580fbc11c817be">end</a>();
<a name="l00788"></a>00788         <span class="keywordflow">for</span> (; s2!=s2end; s1++, s2++)
<a name="l00789"></a>00789           alloc_.construct (s1, *s2);
<a name="l00790"></a>00790 
<a name="l00791"></a>00791         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00792"></a>00792       }
<a name="l00793"></a>00793 
<a name="l00794"></a><a class="code" href="classShare_1_1Vector.html#a55bbffbd92182c8e37ea189f4e51d01">00794</a>       ~<a class="code" href="classShare_1_1Vector.html" title="STL vector.">Vector</a>() {
<a name="l00795"></a>00795         TItem *pEnd = end();
<a name="l00796"></a>00796         <span class="keywordflow">for</span> (TItem *i=begin(); i!=pEnd; i++)
<a name="l00797"></a>00797           alloc_.destroy (i);
<a name="l00798"></a>00798         alloc_.deallocate (data_, capacity_);
<a name="l00799"></a>00799       }
<a name="l00800"></a>00800 
<a name="l00806"></a><a class="code" href="classShare_1_1Vector.html#689b066b5efdf58c5d340bda4946a62d">00806</a>       reference operator[] (size_type index) {
<a name="l00807"></a>00807         <span class="keywordflow">return</span> data_[index];
<a name="l00808"></a>00808       }
<a name="l00809"></a>00809 
<a name="l00813"></a><a class="code" href="classShare_1_1Vector.html#177550eb0e39c49444aa52070712e108">00813</a>       const_reference operator[] (size_type index)<span class="keyword"> const </span>{
<a name="l00814"></a>00814         <span class="keywordflow">return</span> data_[index];
<a name="l00815"></a>00815       }
<a name="l00816"></a>00816 
<a name="l00820"></a><a class="code" href="classShare_1_1Vector.html#b106c936b235a034f0c93f714abf1f0d">00820</a>       <span class="keywordtype">bool</span> <a class="code" href="namespaceShare.html#0a650e9c97529a25f3214449e90a4301">operator== </a>(<span class="keyword">const</span> <a class="code" href="classShare_1_1Vector.html" title="STL vector.">Vector</a> &amp;other)<span class="keyword"> const </span>{
<a name="l00821"></a>00821         <span class="keyword">const</span> TItem *s1 = begin();
<a name="l00822"></a>00822         <span class="keyword">const</span> TItem *s2 = other.<a class="code" href="classShare_1_1Vector.html#572d0a556e319f2dec7df9e4c752f2e3">begin</a>();
<a name="l00823"></a>00823         <span class="keywordflow">for</span> (; s1!=end() &amp;&amp; s2!=other.<a class="code" href="classShare_1_1Vector.html#109e9c1512370fd261580fbc11c817be">end</a>(); s1++, s2++)
<a name="l00824"></a>00824           <span class="keywordflow">if</span> (*s1 != *s2)
<a name="l00825"></a>00825             <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00826"></a>00826         <span class="keywordflow">return</span>
<a name="l00827"></a>00827           s1 == end() &amp;&amp;
<a name="l00828"></a>00828           s2 == other.<a class="code" href="classShare_1_1Vector.html#109e9c1512370fd261580fbc11c817be">end</a>();
<a name="l00829"></a>00829       }
<a name="l00830"></a>00830 
<a name="l00834"></a><a class="code" href="classShare_1_1Vector.html#8bcaa66c7da53b5ac4f6edffe5ee3315">00834</a>       <span class="keywordtype">bool</span> <a class="code" href="namespaceShare.html#2d307a00911813965db453dbde494d54">operator!= </a>(<span class="keyword">const</span> <a class="code" href="classShare_1_1Vector.html" title="STL vector.">Vector</a> &amp;other)<span class="keyword"> const </span>{
<a name="l00835"></a>00835         <span class="keywordflow">return</span> !<a class="code" href="namespaceShare.html#0a650e9c97529a25f3214449e90a4301">operator== </a>(other);
<a name="l00836"></a>00836       }
<a name="l00837"></a>00837 
<a name="l00841"></a><a class="code" href="classShare_1_1Vector.html#572d0a556e319f2dec7df9e4c752f2e3">00841</a>       iterator begin() {
<a name="l00842"></a>00842         <span class="keywordflow">return</span> data_;
<a name="l00843"></a>00843       }
<a name="l00844"></a>00844 
<a name="l00848"></a><a class="code" href="classShare_1_1Vector.html#109e9c1512370fd261580fbc11c817be">00848</a>       iterator end() {
<a name="l00849"></a>00849         <span class="keywordflow">return</span> data_ + <span class="keyword">static_cast&lt;</span>difference_type<span class="keyword">&gt;</span> (size_);
<a name="l00850"></a>00850       }
<a name="l00851"></a>00851 
<a name="l00855"></a><a class="code" href="classShare_1_1Vector.html#b52e1edbc39dff9d3304920b74d6dc03">00855</a>       const_iterator begin()<span class="keyword"> const </span>{
<a name="l00856"></a>00856         <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>const_iterator<span class="keyword">&gt;</span>(data_);
<a name="l00857"></a>00857       }
<a name="l00858"></a>00858 
<a name="l00862"></a><a class="code" href="classShare_1_1Vector.html#33934b932cf107865bfe164b0b3ea628">00862</a>       const_iterator end()<span class="keyword"> const </span>{
<a name="l00863"></a>00863         <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>const_iterator<span class="keyword">&gt;</span>(data_ + <span class="keyword">static_cast&lt;</span>difference_type<span class="keyword">&gt;</span>(size_));
<a name="l00864"></a>00864       }
<a name="l00865"></a>00865 
<a name="l00869"></a><a class="code" href="classShare_1_1Vector.html#e80ea5edb74eebe6d52ddb07445bf591">00869</a>       <span class="keywordtype">void</span> clear() {
<a name="l00870"></a>00870         <span class="keywordflow">for</span> (TItem *i=begin(); i!=end(); i++)
<a name="l00871"></a>00871           alloc_.destroy (i);
<a name="l00872"></a>00872         lowLevelResize(0);
<a name="l00873"></a>00873         size_ = 0;
<a name="l00874"></a>00874       }
<a name="l00875"></a>00875 
<a name="l00879"></a><a class="code" href="classShare_1_1Vector.html#6d0ce4282fa57b6541c09653f3835e3b">00879</a>       <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{
<a name="l00880"></a>00880         <span class="keywordflow">return</span> size_==0;
<a name="l00881"></a>00881       }
<a name="l00882"></a>00882 
<a name="l00888"></a><a class="code" href="classShare_1_1Vector.html#d918a28731ffeb3f854e3193b6165513">00888</a>       <span class="keywordtype">void</span> push_back (const_reference item) {
<a name="l00889"></a>00889         lowLevelResize (size_ + 1, <span class="keyword">true</span>);
<a name="l00890"></a>00890         alloc_.construct (<span class="keyword">this</span> + static_cast&lt;difference_type&gt;(size_), item);
<a name="l00891"></a>00891         size_ ++;
<a name="l00892"></a>00892       }
<a name="l00893"></a>00893 
<a name="l00898"></a><a class="code" href="classShare_1_1Vector.html#0dbfef6d10530562e5f5361868dd57d2">00898</a>       <span class="keywordtype">void</span> pop_back() {
<a name="l00899"></a>00899         lowLevelResize(size_ - 1, <span class="keyword">true</span>);
<a name="l00900"></a>00900         size_ --;
<a name="l00901"></a>00901       }
<a name="l00902"></a>00902 
<a name="l00906"></a><a class="code" href="classShare_1_1Vector.html#a895ea1e82e41833f5251e941b5cb92f">00906</a>       size_type size()<span class="keyword"> const </span>{
<a name="l00907"></a>00907         <span class="keywordflow">return</span> size_;
<a name="l00908"></a>00908       }
<a name="l00909"></a>00909 
<a name="l00915"></a><a class="code" href="classShare_1_1Vector.html#28e31a2478e4f1c2b4de2776d4e29f0a">00915</a>       <span class="keywordtype">void</span> resize (size_type newSize, const_reference val= TItem()) {
<a name="l00916"></a>00916         lowLevelResize(newSize, <span class="keyword">true</span>);
<a name="l00917"></a>00917         <span class="keywordflow">for</span> (; size_ &lt; newSize; size_++)
<a name="l00918"></a>00918           data_[size_] = val;
<a name="l00919"></a>00919 
<a name="l00920"></a>00920         size_ = newSize;
<a name="l00921"></a>00921       }
<a name="l00922"></a>00922 
<a name="l00923"></a>00923     <span class="keyword">private</span>:
<a name="l00924"></a>00924       TAllocator alloc_;
<a name="l00925"></a>00925       size_type size_;
<a name="l00926"></a>00926       size_type capacity_;
<a name="l00927"></a>00927       iterator data_;
<a name="l00928"></a>00928 
<a name="l00929"></a>00929       <span class="keywordtype">void</span> lowLevelCopy (TItem *dest, <span class="keyword">const</span> TItem *src, size_type count) {
<a name="l00930"></a>00930         <span class="keywordflow">for</span> (size_type i=0; i&lt;count; i++, dest++, src++)
<a name="l00931"></a>00931           *dest = *src;
<a name="l00932"></a>00932       }
<a name="l00933"></a>00933 
<a name="l00934"></a>00934       <span class="keywordtype">void</span> lowLevelResize (size_type newSize, <span class="keywordtype">bool</span> bCopyContent=<span class="keyword">false</span>) {
<a name="l00935"></a>00935         <span class="keyword">static</span> <span class="keyword">const</span> size_type allocBaseSize = 1 &lt;&lt; allocBase2Exp;
<a name="l00936"></a>00936         <span class="keywordflow">if</span> (newSize &lt; allocBaseSize)
<a name="l00937"></a>00937           newSize = allocBaseSize;
<a name="l00938"></a>00938 
<a name="l00939"></a>00939         <span class="keywordflow">if</span> (
<a name="l00940"></a>00940             newSize &lt;= capacity_ &amp;&amp;
<a name="l00941"></a>00941             newSize &gt;= (capacity_ &gt;&gt; allocDownFactor2Exp)
<a name="l00942"></a>00942             )
<a name="l00943"></a>00943           <span class="keywordflow">return</span>;
<a name="l00944"></a>00944 
<a name="l00945"></a>00945         <span class="keywordflow">for</span> (capacity_= allocBaseSize; capacity_&lt;newSize; capacity_&lt;&lt;=1);
<a name="l00946"></a>00946         TItem *newBlock = alloc_.allocate (capacity_);
<a name="l00947"></a>00947 
<a name="l00948"></a>00948         <span class="keywordflow">if</span> (data_) {
<a name="l00949"></a>00949           <span class="keywordflow">if</span> (bCopyContent)
<a name="l00950"></a>00950             lowLevelCopy (newBlock, static_cast&lt;const_iterator&gt;(data_), size_);
<a name="l00951"></a>00951 
<a name="l00952"></a>00952           alloc_.deallocate (data_, size_);
<a name="l00953"></a>00953         }
<a name="l00954"></a>00954 
<a name="l00955"></a>00955         data_ = newBlock;
<a name="l00956"></a>00956       }
<a name="l00957"></a>00957   };
<a name="l00958"></a>00958 
<a name="l00965"></a>00965   <span class="keyword">template</span> &lt;<span class="keyword">class</span> TAllocator = std::allocator&lt;<span class="keywordtype">char</span>&gt; &gt;
<a name="l00966"></a><a class="code" href="classShare_1_1String.html">00966</a>   <span class="keyword">class </span><a class="code" href="classShare_1_1String.html" title="STL string.">String</a> {
<a name="l00967"></a>00967       <span class="keyword">typedef</span> <span class="keywordtype">char</span> TItem;
<a name="l00968"></a>00968       <span class="keyword">typedef</span> <a class="code" href="classShare_1_1Vector.html" title="STL vector.">Vector&lt;TItem, TAllocator&gt;</a> <a class="code" href="classShare_1_1Vector.html" title="STL vector.">TContainer</a>;
<a name="l00969"></a>00969       <span class="keyword">typedef</span> <span class="keyword">typename</span> TAllocator::size_type size_type;
<a name="l00970"></a>00970       <span class="keyword">typedef</span> <span class="keyword">typename</span> TAllocator::difference_type difference_type;
<a name="l00971"></a>00971       <span class="keyword">typedef</span> <span class="keyword">typename</span> TAllocator::pointer pointer;
<a name="l00972"></a>00972       <span class="keyword">typedef</span> <span class="keyword">typename</span> TAllocator::const_pointer const_pointer;
<a name="l00973"></a>00973       <span class="keyword">typedef</span> <span class="keyword">typename</span> TAllocator::reference reference;
<a name="l00974"></a>00974       <span class="keyword">typedef</span> <span class="keyword">typename</span> TAllocator::const_reference const_reference;
<a name="l00975"></a>00975 
<a name="l00976"></a>00976     <span class="keyword">public</span>:
<a name="l00977"></a><a class="code" href="classShare_1_1String.html#6a6babd5a7273f122c5be4be4353882e">00977</a>       <span class="keyword">typedef</span> <span class="keyword">typename</span> TContainer::iterator iterator;                   
<a name="l00978"></a><a class="code" href="classShare_1_1String.html#f4d0f80e39511801803c8e65f6de9d79">00978</a>       <span class="keyword">typedef</span> <span class="keyword">typename</span> TContainer::const_iterator const_iterator;       
<a name="l00979"></a>00979 
<a name="l00983"></a><a class="code" href="classShare_1_1String.html#27188ece8cfafe4cace3eed3b3b6694b">00983</a>       <a class="code" href="classShare_1_1String.html" title="STL string.">String</a>():
<a name="l00984"></a>00984         array_ (1, '\0')
<a name="l00985"></a>00985       {
<a name="l00986"></a>00986       }
<a name="l00987"></a>00987 
<a name="l00993"></a><a class="code" href="classShare_1_1String.html#4446e79196fca91cdcda7bfb02d3bf13">00993</a>       <a class="code" href="classShare_1_1String.html" title="STL string.">String</a> (size_type size, const_reference val):
<a name="l00994"></a>00994         array_ (size+1, val)
<a name="l00995"></a>00995       {
<a name="l00996"></a>00996         array_ [size] = <span class="charliteral">'\0'</span>;
<a name="l00997"></a>00997       }
<a name="l00998"></a>00998 
<a name="l01003"></a><a class="code" href="classShare_1_1String.html#ae6ac3d613da579122f26fb35b03183e">01003</a>       <a class="code" href="classShare_1_1String.html" title="STL string.">String</a> (<span class="keyword">const</span> TItem *sz):
<a name="l01004"></a>01004         array_ (szLength (sz)+1)
<a name="l01005"></a>01005       {
<a name="l01006"></a>01006         TItem *i = array_.begin();
<a name="l01007"></a>01007         <span class="keywordflow">for</span> (; *sz; sz++, i++)
<a name="l01008"></a>01008           *i = *sz;
<a name="l01009"></a>01009         *i = <span class="charliteral">'\0'</span>;
<a name="l01010"></a>01010       }
<a name="l01011"></a>01011 
<a name="l01015"></a><a class="code" href="classShare_1_1String.html#e6a2094778942dadcf645d205b885f5d">01015</a>       <a class="code" href="classShare_1_1String.html" title="STL string.">String</a> (<span class="keyword">const</span> <a class="code" href="classShare_1_1String.html" title="STL string.">String</a> &amp;other):
<a name="l01016"></a>01016         array_ (other.array_)
<a name="l01017"></a>01017       {
<a name="l01018"></a>01018       }
<a name="l01019"></a>01019 
<a name="l01023"></a><a class="code" href="classShare_1_1String.html#1b9ede5c62e5e4381b7a87d0255c9134">01023</a>       <a class="code" href="classShare_1_1String.html" title="STL string.">String</a>&amp; operator= (<span class="keyword">const</span> TItem *sz) {
<a name="l01024"></a>01024         array_.resize (szLength (sz)+1);
<a name="l01025"></a>01025         TItem *i = array_.begin();
<a name="l01026"></a>01026         <span class="keywordflow">for</span> (; *sz; sz++, i++)
<a name="l01027"></a>01027           *i = *sz;
<a name="l01028"></a>01028         *i = <span class="charliteral">'\0'</span>;
<a name="l01029"></a>01029 
<a name="l01030"></a>01030         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l01031"></a>01031       }
<a name="l01032"></a>01032 
<a name="l01036"></a><a class="code" href="classShare_1_1String.html#505fba0c016e7c6b4919c5c4265da685">01036</a>       <a class="code" href="classShare_1_1String.html" title="STL string.">String</a>&amp; operator= (<span class="keyword">const</span> <a class="code" href="classShare_1_1String.html" title="STL string.">String</a> &amp;other) {
<a name="l01037"></a>01037         array_ = other.<a class="code" href="classShare_1_1String.html#8385e475859052f33c9348a2d734d0cd">array_</a>;
<a name="l01038"></a>01038         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l01039"></a>01039       }
<a name="l01040"></a>01040 
<a name="l01045"></a><a class="code" href="classShare_1_1String.html#19230865a210aaa4057acf7ac7459b5c">01045</a>       reference operator[] (size_type index) {
<a name="l01046"></a>01046         <span class="keywordflow">return</span> array_[index];
<a name="l01047"></a>01047       }
<a name="l01048"></a>01048 
<a name="l01052"></a><a class="code" href="classShare_1_1String.html#650d7b2e5f26ac509dcd3ecfdbb7bff4">01052</a>       const_reference operator[] (size_type index)<span class="keyword"> const </span>{
<a name="l01053"></a>01053         <span class="keywordflow">return</span> array_[index];
<a name="l01054"></a>01054       }
<a name="l01055"></a>01055 
<a name="l01059"></a><a class="code" href="classShare_1_1String.html#2a1cb227feb5b050bf682546cd479ffd">01059</a>       iterator begin() {
<a name="l01060"></a>01060         <span class="keywordflow">return</span> array_.<a class="code" href="classShare_1_1Vector.html#572d0a556e319f2dec7df9e4c752f2e3">begin</a>();
<a name="l01061"></a>01061       }
<a name="l01062"></a>01062 
<a name="l01066"></a><a class="code" href="classShare_1_1String.html#358eda89bcb19a6c37e5b62482154730">01066</a>       iterator end() {
<a name="l01067"></a>01067         <span class="keywordflow">return</span> array_.end()-1;
<a name="l01068"></a>01068       }
<a name="l01069"></a>01069 
<a name="l01073"></a><a class="code" href="classShare_1_1String.html#a69ce2bcff2abb958d6a2753e3a10763">01073</a>       const_iterator begin()<span class="keyword"> const </span>{
<a name="l01074"></a>01074         <span class="keywordflow">return</span> array_.begin();
<a name="l01075"></a>01075       }
<a name="l01076"></a>01076 
<a name="l01080"></a><a class="code" href="classShare_1_1String.html#f1ba02b8fe54763d8136793f35d10d52">01080</a>       const_iterator end()<span class="keyword"> const </span>{
<a name="l01081"></a>01081         <span class="keywordflow">return</span> array_.end()-1;
<a name="l01082"></a>01082       }
<a name="l01083"></a>01083 
<a name="l01089"></a><a class="code" href="classShare_1_1String.html#ea6e94ce12f9fe1ceaee93e650793b2b">01089</a>       <span class="keywordtype">int</span> compare (<span class="keyword">const</span> <a class="code" href="classShare_1_1String.html" title="STL string.">String</a> &amp;other)<span class="keyword"> const </span>{
<a name="l01090"></a>01090         <span class="keyword">const</span> TItem *s1 = begin();
<a name="l01091"></a>01091         <span class="keyword">const</span> TItem *s2 = other.<a class="code" href="classShare_1_1String.html#2a1cb227feb5b050bf682546cd479ffd">begin</a>();
<a name="l01092"></a>01092         <span class="keyword">const</span> TItem *s1end = end();
<a name="l01093"></a>01093         <span class="keyword">const</span> TItem *s2end = other.<a class="code" href="classShare_1_1String.html#358eda89bcb19a6c37e5b62482154730">end</a>();
<a name="l01094"></a>01094         <span class="keywordflow">for</span> (; s1!=s1end &amp;&amp; s2!=s2end; s1++, s2++) {
<a name="l01095"></a>01095           <span class="keywordflow">if</span> (*s1 &lt; *s2)
<a name="l01096"></a>01096             <span class="keywordflow">return</span> -1;
<a name="l01097"></a>01097           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (*s1 &gt; *s2)
<a name="l01098"></a>01098             <span class="keywordflow">return</span> 1;
<a name="l01099"></a>01099         }
<a name="l01100"></a>01100         <span class="keywordflow">if</span> (s1 != end())
<a name="l01101"></a>01101           <span class="keywordflow">return</span> 1;
<a name="l01102"></a>01102         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (s2 != other.<a class="code" href="classShare_1_1String.html#358eda89bcb19a6c37e5b62482154730">end</a>())
<a name="l01103"></a>01103           <span class="keywordflow">return</span> -1;
<a name="l01104"></a>01104         <span class="keywordflow">else</span>
<a name="l01105"></a>01105           <span class="keywordflow">return</span> 0;
<a name="l01106"></a>01106       }
<a name="l01107"></a><a class="code" href="classShare_1_1String.html#9269309c9a4a7eb77c14d1f07af8ca62">01107</a>       <span class="keywordtype">bool</span> <a class="code" href="namespaceShare.html#0a650e9c97529a25f3214449e90a4301">operator== </a>(<span class="keyword">const</span> <a class="code" href="classShare_1_1String.html" title="STL string.">String&lt;TAllocator&gt;</a> &amp;other)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 0==compare (other); }
<a name="l01108"></a><a class="code" href="classShare_1_1String.html#78977f7ef21c6ae8d09ccf46c0847c06">01108</a>       <span class="keywordtype">bool</span> <a class="code" href="namespaceShare.html#2d307a00911813965db453dbde494d54">operator!= </a>(<span class="keyword">const</span> <a class="code" href="classShare_1_1String.html" title="STL string.">String&lt;TAllocator&gt;</a> &amp;other)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 0!=compare (other); }
<a name="l01109"></a><a class="code" href="classShare_1_1String.html#5cf0d9c70a5d6b8c10a220dcea95a170">01109</a>       <span class="keywordtype">bool</span> operator&lt;= (const String&lt;TAllocator&gt; &amp;other) <span class="keyword">const</span> { <span class="keywordflow">return</span> 0&gt;=compare (other); }
<a name="l01110"></a><a class="code" href="classShare_1_1String.html#ea4291ffa6d9ce3da94158e8a570593c">01110</a>       <span class="keywordtype">bool</span> operator&gt;= (<span class="keyword">const</span> <a class="code" href="classShare_1_1String.html" title="STL string.">String&lt;TAllocator&gt;</a> &amp;other)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 0&lt;=compare (other); }
<a name="l01111"></a><a class="code" href="classShare_1_1String.html#4381c71de6b1796488f48b46b9ac9cb8">01111</a>       <span class="keywordtype">bool</span> operator&lt;  (const String&lt;TAllocator&gt; &amp;other) <span class="keyword">const</span> { <span class="keywordflow">return</span> 0&gt; compare (other); }
<a name="l01112"></a><a class="code" href="classShare_1_1String.html#97dc02561135e6103c4133d1044f64bd">01112</a>       <span class="keywordtype">bool</span> operator&gt;  (<span class="keyword">const</span> <a class="code" href="classShare_1_1String.html" title="STL string.">String&lt;TAllocator&gt;</a> &amp;other)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 0&lt; compare (other); }
<a name="l01113"></a>01113 
<a name="l01117"></a>01117       <span class="keywordtype">void</span> append (<span class="keyword">const</span> TItem *);
<a name="l01118"></a>01118 
<a name="l01122"></a><a class="code" href="classShare_1_1String.html#d1219bd3b0bd5aa7f6976859495100fc">01122</a>       <span class="keywordtype">void</span> clear() {
<a name="l01123"></a>01123         array_.clear();
<a name="l01124"></a>01124       }
<a name="l01125"></a>01125 
<a name="l01129"></a><a class="code" href="classShare_1_1String.html#6f7554f10344bc738273bf2025a53f99">01129</a>       <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{
<a name="l01130"></a>01130         <span class="keywordflow">return</span> array_.empty();
<a name="l01131"></a>01131       }
<a name="l01132"></a>01132 
<a name="l01136"></a><a class="code" href="classShare_1_1String.html#bb051d124d6a592d78a79dd8657ae588">01136</a>       size_type length()<span class="keyword"> const </span>{
<a name="l01137"></a>01137         <span class="keywordflow">return</span> array_.size();
<a name="l01138"></a>01138       }
<a name="l01139"></a>01139 
<a name="l01143"></a><a class="code" href="classShare_1_1String.html#ae6c9d7a3b2c716b21baafbd9d3b410f">01143</a>       <span class="keyword">const</span> TItem* c_str()<span class="keyword"> const </span>{
<a name="l01144"></a>01144         <span class="keywordflow">return</span> array_.begin();
<a name="l01145"></a>01145       }
<a name="l01146"></a>01146 
<a name="l01147"></a>01147     <span class="keyword">private</span>:
<a name="l01148"></a>01148       TContainer array_;
<a name="l01149"></a>01149       TAllocator alloc_;
<a name="l01150"></a>01150 
<a name="l01151"></a>01151     <span class="keyword">private</span>:
<a name="l01152"></a>01152       <span class="keyword">static</span> size_type szLength (<span class="keyword">const</span> TItem *sz) {
<a name="l01153"></a>01153         <span class="keywordtype">int</span> len = 0;
<a name="l01154"></a>01154         <span class="keywordflow">while</span> (*sz)
<a name="l01155"></a>01155           len++, sz++;
<a name="l01156"></a>01156         <span class="keywordflow">return</span> len;
<a name="l01157"></a>01157       }
<a name="l01158"></a>01158   };
<a name="l01159"></a>01159 
<a name="l01163"></a><a class="code" href="namespaceShare.html#d57edb0969267ee3b78817a434a945b2">01163</a>   <span class="keyword">template</span> &lt;<span class="keyword">class</span> A&gt; <a class="code" href="classShare_1_1String.html" title="STL string.">String&lt;A&gt;</a> <a class="code" href="namespaceShare.html#d57edb0969267ee3b78817a434a945b2" title="Share::Vector string concatenation.">operator+ </a>(<a class="code" href="classShare_1_1String.html" title="STL string.">String&lt;A&gt;</a> s1, <span class="keyword">const</span> <a class="code" href="classShare_1_1String.html" title="STL string.">String&lt;A&gt;</a> &amp;s2)
<a name="l01164"></a>01164   {
<a name="l01165"></a>01165     s1.<a class="code" href="classShare_1_1String.html#cfec10d0d2f75fe97690c6b5f899dd60">append</a> (s2);
<a name="l01166"></a>01166     <span class="keywordflow">return</span> s1;
<a name="l01167"></a>01167   }
<a name="l01168"></a>01168 
<a name="l01174"></a>01174   <span class="keyword">template</span> &lt;
<a name="l01175"></a>01175     <span class="keyword">class </span>TFirst,
<a name="l01176"></a>01176     <span class="keyword">class </span>TSecond
<a name="l01177"></a>01177     &gt;
<a name="l01178"></a><a class="code" href="structShare_1_1Pair.html">01178</a>   <span class="keyword">struct </span><a class="code" href="structShare_1_1Pair.html" title="STL pair.">Pair</a> {
<a name="l01179"></a><a class="code" href="structShare_1_1Pair.html#cc1d6aac63631ee096995d8c7fc4d653">01179</a>     TFirst first;
<a name="l01180"></a><a class="code" href="structShare_1_1Pair.html#f8d6c4bf080c168e326704b85c061c68">01180</a>     TSecond second;
<a name="l01181"></a>01181   };
<a name="l01182"></a>01182 
<a name="l01191"></a>01191   <span class="keyword">template</span> &lt;
<a name="l01192"></a>01192     <span class="keyword">class </span>TKey,
<a name="l01193"></a>01193     <span class="keyword">class </span>TValue,
<a name="l01194"></a>01194     <span class="keyword">class </span>TAllocator = std::allocator&lt; Pair&lt;TKey, TValue&gt; &gt;
<a name="l01195"></a>01195     &gt;
<a name="l01196"></a><a class="code" href="classShare_1_1Map.html">01196</a>   <span class="keyword">class </span><a class="code" href="classShare_1_1Map.html" title="STL map.">Map</a> {
<a name="l01200"></a>01200       <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> defaultHtSize = 1 &lt;&lt; 12;
<a name="l01201"></a>01201 
<a name="l01202"></a>01202       <span class="keyword">typedef</span> <a class="code" href="structShare_1_1Pair.html" title="STL pair.">Pair&lt;TKey, TValue&gt;</a> <a class="code" href="structShare_1_1Pair.html" title="STL pair.">TData</a>;
<a name="l01203"></a>01203       <span class="keyword">typedef</span> <a class="code" href="structShare_1_1Pair.html" title="STL pair.">TData</a>&amp; <a class="code" href="structShare_1_1Pair.html" title="STL pair.">TData_reference</a>;
<a name="l01204"></a>01204       <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="structShare_1_1Pair.html" title="STL pair.">TData</a>* <a class="code" href="structShare_1_1Pair.html" title="STL pair.">TData_const_pointer</a>;
<a name="l01205"></a>01205       <span class="keyword">typedef</span> <span class="keywordtype">size_t</span> size_type;
<a name="l01206"></a>01206       <span class="keyword">typedef</span> <span class="keyword">typename</span> TAllocator::template rebind&lt;Map&gt;::other TMapAllocator;
<a name="l01207"></a>01207       <span class="keyword">typedef</span> <span class="keyword">typename</span> TMapAllocator::const_pointer TMap_const_pointer;
<a name="l01208"></a>01208 
<a name="l01209"></a>01209     <span class="keyword">public</span>:
<a name="l01214"></a><a class="code" href="classShare_1_1Map.html#6ebb91340e5270e7a2b8a5d439c47655">01214</a>       <a class="code" href="classShare_1_1Map.html" title="STL map.">Map</a> (size_type htSize= defaultHtSize):
<a name="l01215"></a>01215         htSize_ (htSize)
<a name="l01216"></a>01216       {
<a name="l01217"></a>01217         htArray_ = pItemAlloc_.allocate (htSize_);
<a name="l01218"></a>01218         <span class="keywordflow">for</span> (size_type i=0; i&lt;htSize_; i++)
<a name="l01219"></a>01219           htArray_[i]=0;
<a name="l01220"></a>01220       }
<a name="l01221"></a>01221 
<a name="l01222"></a>01222     <span class="keyword">private</span>:
<a name="l01223"></a>01223       <span class="keyword">struct </span>Item;
<a name="l01224"></a>01224       <span class="keyword">typedef</span> <span class="keyword">typename</span> TAllocator::template rebind&lt;Item&gt;::other TItemAllocator;
<a name="l01225"></a>01225       <span class="keyword">typedef</span> <span class="keyword">typename</span> TItemAllocator::pointer TItem_pointer;
<a name="l01226"></a>01226       <span class="keyword">typedef</span> <span class="keyword">typename</span> TItemAllocator::const_pointer TItem_const_pointer;
<a name="l01227"></a>01227       <span class="keyword">typedef</span> <span class="keyword">typename</span> TItemAllocator::reference TItem_reference;
<a name="l01228"></a>01228       <span class="keyword">struct </span>Item {
<a name="l01229"></a>01229         TData data;
<a name="l01230"></a>01230         TItem_pointer next;
<a name="l01231"></a>01231       };
<a name="l01232"></a>01232       <span class="keyword">typedef</span> <span class="keyword">typename</span> TAllocator::template rebind&lt;TItem_pointer&gt;::other TPItemAllocator;
<a name="l01233"></a>01233       <span class="keyword">typedef</span> <span class="keyword">typename</span> TPItemAllocator::pointer TPItem_pointer;
<a name="l01234"></a>01234 
<a name="l01235"></a>01235     <span class="keyword">public</span>:
<a name="l01240"></a><a class="code" href="classShare_1_1Map_1_1const__iterator.html">01240</a>       <span class="keyword">class </span><a class="code" href="classShare_1_1Map_1_1const__iterator.html" title="STL map const_iterator equivalent.">const_iterator</a> {
<a name="l01241"></a>01241         <span class="keyword">public</span>:
<a name="l01242"></a><a class="code" href="classShare_1_1Map_1_1const__iterator.html#b122df2786ba33c582ff44a6a9cf07fb">01242</a>           <a class="code" href="classShare_1_1Map_1_1const__iterator.html" title="STL map const_iterator equivalent.">const_iterator</a>():
<a name="l01243"></a>01243             hTable_ (0),
<a name="l01244"></a>01244             hashIndex_ (0),
<a name="l01245"></a>01245             item_ (0)
<a name="l01246"></a>01246           {
<a name="l01247"></a>01247           }
<a name="l01248"></a>01248 
<a name="l01252"></a><a class="code" href="classShare_1_1Map_1_1const__iterator.html#610420dd9f7875bd1b01922ed1969afe">01252</a>           <a class="code" href="structShare_1_1Pair.html" title="STL pair.">TData_const_pointer</a> operator-&gt;() {
<a name="l01253"></a>01253             <span class="keywordflow">if</span> (!item_)
<a name="l01254"></a>01254               <span class="keywordflow">return</span> 0;
<a name="l01255"></a>01255             <span class="keywordflow">else</span>
<a name="l01256"></a>01256               <span class="keywordflow">return</span> &amp;(item_-&gt; data);
<a name="l01257"></a>01257           }
<a name="l01258"></a>01258 
<a name="l01262"></a><a class="code" href="classShare_1_1Map_1_1const__iterator.html#b57a1cfd73c9faec415db7b1aa853f34">01262</a>           operator TData_const_pointer() {
<a name="l01263"></a>01263             <span class="keywordflow">return</span> operator-&gt;();
<a name="l01264"></a>01264           }
<a name="l01265"></a>01265 
<a name="l01269"></a><a class="code" href="classShare_1_1Map_1_1const__iterator.html#535869b90796643bb607974e97212e9c">01269</a>           <a class="code" href="classShare_1_1Map_1_1const__iterator.html" title="STL map const_iterator equivalent.">const_iterator</a>&amp; <a class="code" href="namespaceShare.html#2c67551ac7826ef47d668ce199352c5e" title="RelocPtr post-increment.">operator ++</a>() {
<a name="l01270"></a>01270             <span class="keywordflow">if</span> (item_)
<a name="l01271"></a>01271               item_ = item_-&gt; next;
<a name="l01272"></a>01272 
<a name="l01273"></a>01273             <span class="keywordflow">if</span> (!item_) {
<a name="l01274"></a>01274               <span class="keywordflow">for</span> (
<a name="l01275"></a>01275                   hashIndex_++;
<a name="l01276"></a>01276                   hashIndex_ &lt; hTable_-&gt;htSize_ &amp;&amp; hTable_-&gt;htArray_[hashIndex_] == 0;
<a name="l01277"></a>01277                   hashIndex_ ++);
<a name="l01278"></a>01278 
<a name="l01279"></a>01279               <span class="keywordflow">if</span> (hashIndex_ &lt; hTable_-&gt;htSize_)
<a name="l01280"></a>01280                 item_ = hTable_-&gt; htArray_ [hashIndex_];
<a name="l01281"></a>01281             }
<a name="l01282"></a>01282 
<a name="l01283"></a>01283             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l01284"></a>01284           }
<a name="l01285"></a>01285 
<a name="l01289"></a><a class="code" href="classShare_1_1Map_1_1const__iterator.html#5a4da0691671d9da2735ebfdbcf2f691">01289</a>           <a class="code" href="classShare_1_1Map_1_1const__iterator.html" title="STL map const_iterator equivalent.">const_iterator</a> <a class="code" href="namespaceShare.html#2c67551ac7826ef47d668ce199352c5e" title="RelocPtr post-increment.">operator ++</a>(<span class="keywordtype">int</span>) {
<a name="l01290"></a>01290             <a class="code" href="classShare_1_1Map_1_1const__iterator.html" title="STL map const_iterator equivalent.">const_iterator</a> tmp = *<span class="keyword">this</span>;
<a name="l01291"></a>01291             <a class="code" href="namespaceShare.html#2c67551ac7826ef47d668ce199352c5e" title="RelocPtr post-increment.">operator ++</a>();
<a name="l01292"></a>01292             <span class="keywordflow">return</span> tmp;
<a name="l01293"></a>01293           }
<a name="l01294"></a>01294 
<a name="l01298"></a><a class="code" href="classShare_1_1Map_1_1const__iterator.html#74c34d89efc02994548f52576763d9f1">01298</a>           <span class="keywordtype">bool</span> <a class="code" href="namespaceShare.html#0a650e9c97529a25f3214449e90a4301">operator== </a>(<span class="keyword">const</span> <a class="code" href="classShare_1_1Map_1_1const__iterator.html" title="STL map const_iterator equivalent.">const_iterator</a> &amp;other) {
<a name="l01299"></a>01299             <span class="keywordflow">return</span>
<a name="l01300"></a>01300               hTable_ == other.<a class="code" href="classShare_1_1Map_1_1const__iterator.html#bebf0961ab91532c0cdb8d7e7aea6b99">hTable_</a> &amp;&amp;
<a name="l01301"></a>01301               item_ == other.<a class="code" href="classShare_1_1Map_1_1const__iterator.html#e8c3501f01d09ad57dc2a3a30487b267">item_</a>;
<a name="l01302"></a>01302           }
<a name="l01303"></a>01303 
<a name="l01307"></a><a class="code" href="classShare_1_1Map_1_1const__iterator.html#9e636796770e81c5c08e0f91d97c9fb9">01307</a>           <span class="keywordtype">bool</span> <a class="code" href="namespaceShare.html#2d307a00911813965db453dbde494d54">operator!= </a>(<span class="keyword">const</span> <a class="code" href="classShare_1_1Map_1_1const__iterator.html" title="STL map const_iterator equivalent.">const_iterator</a> &amp;other) {
<a name="l01308"></a>01308             <span class="keywordflow">return</span> !<a class="code" href="namespaceShare.html#0a650e9c97529a25f3214449e90a4301">operator== </a>(other);
<a name="l01309"></a>01309           }
<a name="l01310"></a>01310 
<a name="l01311"></a>01311         <span class="keyword">private</span>:
<a name="l01312"></a>01312           <a class="code" href="classShare_1_1Map_1_1const__iterator.html" title="STL map const_iterator equivalent.">const_iterator</a> (TMap_const_pointer ht, size_type hashIndex, TItem_const_pointer item):
<a name="l01313"></a>01313             hTable_ (ht),
<a name="l01314"></a>01314             hashIndex_ (hashIndex),
<a name="l01315"></a>01315             item_ (item)
<a name="l01316"></a>01316           {
<a name="l01317"></a>01317           }
<a name="l01318"></a>01318 
<a name="l01319"></a>01319         <span class="keyword">private</span>:
<a name="l01320"></a>01320           TMap_const_pointer hTable_;
<a name="l01321"></a>01321           size_type hashIndex_;
<a name="l01322"></a>01322           TItem_const_pointer item_;
<a name="l01323"></a><a class="code" href="classShare_1_1Map_1_1const__iterator.html#5417a09f65011b1579a10bbec43d9d37">01323</a>           <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classShare_1_1Map.html" title="STL map.">Map</a>;
<a name="l01324"></a>01324       };  <span class="comment">// (class const_iterator)</span>
<a name="l01325"></a>01325 
<a name="l01326"></a><a class="code" href="classShare_1_1Map.html#e5f50059db712ae874312f216bf3bbf9">01326</a>       ~<a class="code" href="classShare_1_1Map.html" title="STL map.">Map</a>() {
<a name="l01327"></a>01327         clear();
<a name="l01328"></a>01328         pItemAlloc_.deallocate (htArray_, htSize_);
<a name="l01329"></a>01329       }
<a name="l01330"></a>01330 
<a name="l01334"></a><a class="code" href="classShare_1_1Map.html#7085b0f4e59a27266b44ac5da4df6821">01334</a>       <span class="keywordtype">void</span> clear() {
<a name="l01335"></a>01335         TItem_pointer *ppCurrent = htArray_;
<a name="l01336"></a>01336         <span class="keywordflow">for</span> (size_type hashIndex=0; hashIndex&lt;htSize_; hashIndex++, ppCurrent++) {
<a name="l01337"></a>01337           Item *pCurrent = *ppCurrent;
<a name="l01338"></a>01338           <span class="keywordflow">while</span> (pCurrent) {
<a name="l01339"></a>01339             Item *pNext = pCurrent-&gt;next;
<a name="l01340"></a>01340             itemAlloc_.destroy (pCurrent);
<a name="l01341"></a>01341             itemAlloc_.deallocate (pCurrent, 1);
<a name="l01342"></a>01342             pCurrent = pNext;
<a name="l01343"></a>01343           }
<a name="l01344"></a>01344           *ppCurrent = 0;
<a name="l01345"></a>01345         }
<a name="l01346"></a>01346       }
<a name="l01347"></a>01347 
<a name="l01353"></a><a class="code" href="classShare_1_1Map.html#1923a68a1dabf4d9bcc4afe32939b2b1">01353</a>       <a class="code" href="classShare_1_1Map_1_1const__iterator.html" title="STL map const_iterator equivalent.">const_iterator</a> find (<span class="keyword">const</span> TKey &amp;key) {
<a name="l01354"></a>01354         size_type hashIndex = hashFunction (key);
<a name="l01355"></a>01355         TItem_pointer pCurrent = htArray_ [hashIndex];
<a name="l01356"></a>01356 
<a name="l01357"></a>01357         <span class="keywordflow">while</span> (pCurrent &amp;&amp; pCurrent-&gt;data.first != key)
<a name="l01358"></a>01358           pCurrent = pCurrent-&gt;next;
<a name="l01359"></a>01359 
<a name="l01360"></a>01360         <span class="keywordflow">return</span> <a class="code" href="classShare_1_1Map_1_1const__iterator.html" title="STL map const_iterator equivalent.">const_iterator</a> (<span class="keyword">this</span>, hashIndex, pCurrent);
<a name="l01361"></a>01361       }
<a name="l01362"></a>01362 
<a name="l01369"></a><a class="code" href="classShare_1_1Map.html#672646eac53e95852fa263751f92c979">01369</a>       TValue&amp; operator[] (<span class="keyword">const</span> TKey &amp;key) {
<a name="l01370"></a>01370         size_type hashIndex = hashFunction (key);
<a name="l01371"></a>01371         <span class="keyword">typedef</span> <span class="keyword">typename</span> TItemAllocator::difference_type TDiff;
<a name="l01372"></a>01372         TItem_pointer *ppCurrent = htArray_ + <span class="keyword">static_cast&lt;</span>TDiff<span class="keyword">&gt;</span>(hashIndex);
<a name="l01373"></a>01373 
<a name="l01374"></a>01374         <span class="keywordflow">for</span> (; *ppCurrent; ppCurrent = &amp;((*ppCurrent)-&gt; next)) {
<a name="l01375"></a>01375           <a class="code" href="structShare_1_1Pair.html" title="STL pair.">TData_reference</a> current = (*ppCurrent)-&gt; data;
<a name="l01376"></a>01376           <span class="keywordflow">if</span> (current.<a class="code" href="structShare_1_1Pair.html#cc1d6aac63631ee096995d8c7fc4d653">first</a> == key)
<a name="l01377"></a>01377             <span class="keywordflow">return</span> current.<a class="code" href="structShare_1_1Pair.html#f8d6c4bf080c168e326704b85c061c68">second</a>;
<a name="l01378"></a>01378         }
<a name="l01379"></a>01379 
<a name="l01380"></a>01380         Item item = {
<a name="l01381"></a>01381           { key, TValue() },
<a name="l01382"></a>01382           0
<a name="l01383"></a>01383         };
<a name="l01384"></a>01384 
<a name="l01385"></a>01385         *ppCurrent = itemAlloc_.allocate (1);
<a name="l01386"></a>01386         itemAlloc_.construct (*ppCurrent, item);
<a name="l01387"></a>01387 
<a name="l01388"></a>01388         <span class="keywordflow">return</span> (*ppCurrent)-&gt;data.second;
<a name="l01389"></a>01389       }
<a name="l01390"></a>01390 
<a name="l01395"></a><a class="code" href="classShare_1_1Map.html#11c976b8d8bd46ead6c2c01742aa5d19">01395</a>       <a class="code" href="classShare_1_1Map_1_1const__iterator.html" title="STL map const_iterator equivalent.">const_iterator</a> begin()<span class="keyword"> const </span>{
<a name="l01396"></a>01396         <a class="code" href="classShare_1_1Map_1_1const__iterator.html" title="STL map const_iterator equivalent.">const_iterator</a> iter (<span class="keyword">this</span>, 0, 0);
<a name="l01397"></a>01397         iter++;
<a name="l01398"></a>01398         <span class="keywordflow">return</span> iter;
<a name="l01399"></a>01399       }
<a name="l01400"></a>01400 
<a name="l01405"></a><a class="code" href="classShare_1_1Map.html#2812de4f91367b44c1c98951016e8a6d">01405</a>       <a class="code" href="classShare_1_1Map_1_1const__iterator.html" title="STL map const_iterator equivalent.">const_iterator</a> end()<span class="keyword"> const </span>{
<a name="l01406"></a>01406         <span class="keywordflow">return</span> <a class="code" href="classShare_1_1Map_1_1const__iterator.html" title="STL map const_iterator equivalent.">const_iterator</a> (<span class="keyword">this</span>, 0, 0);
<a name="l01407"></a>01407       }
<a name="l01408"></a>01408 
<a name="l01409"></a>01409     <span class="keyword">private</span>:
<a name="l01410"></a>01410       <span class="keywordtype">size_t</span> htSize_;
<a name="l01411"></a>01411       TPItem_pointer htArray_;
<a name="l01412"></a>01412       TItemAllocator itemAlloc_;
<a name="l01413"></a>01413       TPItemAllocator pItemAlloc_;
<a name="l01414"></a>01414 
<a name="l01418"></a>01418       <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt; <span class="keywordtype">size_t</span> hashFunction (<span class="keyword">const</span> T &amp;key) {
<a name="l01419"></a>01419         <span class="keyword">typedef</span> <span class="keyword">typename</span> T::const_iterator Iterator;
<a name="l01420"></a>01420         Iterator i= key.begin();
<a name="l01421"></a>01421         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h=0;
<a name="l01422"></a>01422         <span class="keywordflow">for</span> (; i != key.end(); i++) {
<a name="l01423"></a>01423           <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> p = static_cast&lt;unsigned char&gt; (*i);
<a name="l01424"></a>01424           h = 31*h + p;
<a name="l01425"></a>01425         }
<a name="l01426"></a>01426         <span class="keywordflow">return</span> h % htSize_;
<a name="l01427"></a>01427       }
<a name="l01428"></a>01428   };
<a name="l01429"></a>01429 }
<a name="l01430"></a>01430 
<a name="l01431"></a>01431 <span class="preprocessor">#endif // SHARELIB_H</span>
</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Sun Aug 26 17:42:59 2007 for ShareLibrary by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.2 </small></address>
</body>
</html>