<!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 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 Pages</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File List</span></a></li>
<li><a href="globals.html"><span>File 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 <new></span> <span class="comment">// Import std::bad_alloc exception</span>
<a name="l00022"></a>00022 <span class="preprocessor">#include <memory></span> <span class="comment">// Import std::allocator</span>
<a name="l00023"></a>00023 <span class="preprocessor">#include <iterator></span> <span class="comment">// Import std::random_access_iterator_tag</span>
<a name="l00024"></a>00024 <span class="preprocessor">#include <functional></span>
<a name="l00025"></a>00025 <span class="preprocessor">#include <stddef.h></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> <<span class="keywordtype">bool</span>> <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> <> <span class="keyword">struct </span>ERROR_CTAssert_failed__Unexpected_sizeof_char<true> { };
<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 &);
<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 &);
<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<sizeof(char)==1>();
<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<</span><span class="keywordtype">char</span> *<span class="keyword">></span> (abs) - static_cast<char *> (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<absolute_pointer>(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<sizeof(char)==1>();
<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<</span><span class="keywordtype">char</span> *<span class="keyword">></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> <<span class="keyword">class</span> T> <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& <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& <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> <> <span class="keyword">struct </span><a class="code" href="structShare_1_1TReference.html" title="Reference generic template.">TReference</a><void> {
<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> <> <span class="keyword">struct </span><a class="code" href="structShare_1_1TReference.html" title="Reference generic template.">TReference</a><const void> {
<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> <<span class="keyword">class</span> T> <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> <<span class="keyword">class</span> T> <span class="keyword">struct </span><a class="code" href="structShare_1_1TVoidPointer.html" title="Void pointer generic template.">TVoidPointer</a><const T> {
<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> <<span class="keyword">class</span> T> <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<T>::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<void_pointer> (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-> <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-> <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>&);
<a name="l00338"></a>00338 <a class="code" href="classShare_1_1ShareManager.html" title="Gateway to shared segment">ShareManager</a>& operator= (<span class="keyword">const</span> <a class="code" href="classShare_1_1ShareManager.html" title="Gateway to shared segment">ShareManager</a>&);
<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>()-> <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>()-> <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> <<span class="keyword">class</span> T> <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<T>::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<T>::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<T>::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<T>::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()-> 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> &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>& <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> &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>& <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>()-> 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-> </a>()<span class="keyword"> const </span>{
<a name="l00498"></a>00498 <span class="keywordflow">return</span> static_cast <T *> (<a class="code" href="classShare_1_1ShareManager.html#9a3f4b7db3b1e9150b3288e7ff5d996a">ShareManager::instance</a>()-> 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-> </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<T></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->());
<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<T></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<T></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>& <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>& <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>& <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>& <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> <<span class="keyword">class</span> T> <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr<T></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<T></a> &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<T></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> <<span class="keyword">class</span> T> <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr<T></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<T></a> &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<T></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> <<span class="keyword">class</span> T> 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<T></a> &a, <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr<T></a> &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> <<span class="keyword">class</span> T> <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr<T></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<T></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> <<span class="keyword">class</span> T> <a class="code" href="classShare_1_1RelocPtr.html" title="Relocable pointer type.">RelocPtr<T></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<T></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> <<span class="keyword">class</span> T> <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<T></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<const T></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& <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& <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> <<span class="keyword">class</span> U> <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<U></a>&) throw() { }
<a name="l00647"></a>00647
<a name="l00652"></a>00652 <span class="keyword">template</span> <<span class="keyword">class</span> U>
<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<U></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> &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> &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<T*>(<a class="code" href="classShare_1_1ShareManager.html#9a3f4b7db3b1e9150b3288e7ff5d996a">ShareManager::instance</a>()-> 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>()-> 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& 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->~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>()-> 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> <<span class="keyword">class</span> T1, <span class="keyword">class</span> T2> <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<T1></a>&, <span class="keyword">const</span> <a class="code" href="classShare_1_1Allocator.html" title="STL allocator.">Allocator<T2></a>&) 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> <<span class="keyword">class</span> T1, <span class="keyword">class</span> T2> <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<T1></a>&, <span class="keyword">const</span> <a class="code" href="classShare_1_1Allocator.html" title="STL allocator.">Allocator<T2></a>&) 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> <> <span class="keywordtype">void</span> Allocator<char>::destroy(Allocator<char>::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> <
<a name="l00722"></a>00722 <span class="keyword">class </span>TItem,
<a name="l00723"></a>00723 <span class="keyword">class </span>TAllocator = std::allocator<TItem>
<a name="l00724"></a>00724 >
<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> &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>& operator= (<span class="keyword">const</span> <a class="code" href="classShare_1_1Vector.html" title="STL vector.">Vector</a> &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> &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() && 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() &&
<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> &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<</span>difference_type<span class="keyword">></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<</span>const_iterator<span class="keyword">></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<</span>const_iterator<span class="keyword">></span>(data_ + <span class="keyword">static_cast<</span>difference_type<span class="keyword">></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<difference_type>(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_ < 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<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 << allocBase2Exp;
<a name="l00936"></a>00936 <span class="keywordflow">if</span> (newSize < 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 <= capacity_ &&
<a name="l00941"></a>00941 newSize >= (capacity_ >> 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_<newSize; capacity_<<=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<const_iterator>(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> <<span class="keyword">class</span> TAllocator = std::allocator<<span class="keywordtype">char</span>> >
<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<TItem, TAllocator></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> &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>& 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>& operator= (<span class="keyword">const</span> <a class="code" href="classShare_1_1String.html" title="STL string.">String</a> &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> &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 && s2!=s2end; s1++, s2++) {
<a name="l01095"></a>01095 <span class="keywordflow">if</span> (*s1 < *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 > *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<TAllocator></a> &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<TAllocator></a> &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<= (const String<TAllocator> &other) <span class="keyword">const</span> { <span class="keywordflow">return</span> 0>=compare (other); }
<a name="l01110"></a><a class="code" href="classShare_1_1String.html#ea4291ffa6d9ce3da94158e8a570593c">01110</a> <span class="keywordtype">bool</span> operator>= (<span class="keyword">const</span> <a class="code" href="classShare_1_1String.html" title="STL string.">String<TAllocator></a> &other)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 0<=compare (other); }
<a name="l01111"></a><a class="code" href="classShare_1_1String.html#4381c71de6b1796488f48b46b9ac9cb8">01111</a> <span class="keywordtype">bool</span> operator< (const String<TAllocator> &other) <span class="keyword">const</span> { <span class="keywordflow">return</span> 0> compare (other); }
<a name="l01112"></a><a class="code" href="classShare_1_1String.html#97dc02561135e6103c4133d1044f64bd">01112</a> <span class="keywordtype">bool</span> operator> (<span class="keyword">const</span> <a class="code" href="classShare_1_1String.html" title="STL string.">String<TAllocator></a> &other)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 0< 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> <<span class="keyword">class</span> A> <a class="code" href="classShare_1_1String.html" title="STL string.">String<A></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<A></a> s1, <span class="keyword">const</span> <a class="code" href="classShare_1_1String.html" title="STL string.">String<A></a> &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> <
<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 >
<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> <
<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< Pair<TKey, TValue> >
<a name="l01195"></a>01195 >
<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 << 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<TKey, TValue></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>& <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<Map>::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<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<Item>::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<TItem_pointer>::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->() {
<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> &(item_-> 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->();
<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>& <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_-> 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_ < hTable_->htSize_ && hTable_->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_ < hTable_->htSize_)
<a name="l01280"></a>01280 item_ = hTable_-> 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> &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> &&
<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> &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<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->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 &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 && pCurrent->data.first != key)
<a name="l01358"></a>01358 pCurrent = pCurrent->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& operator[] (<span class="keyword">const</span> TKey &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<</span>TDiff<span class="keyword">></span>(hashIndex);
<a name="l01373"></a>01373
<a name="l01374"></a>01374 <span class="keywordflow">for</span> (; *ppCurrent; ppCurrent = &((*ppCurrent)-> next)) {
<a name="l01375"></a>01375 <a class="code" href="structShare_1_1Pair.html" title="STL pair.">TData_reference</a> current = (*ppCurrent)-> 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)->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><<span class="keyword">class</span> T> <span class="keywordtype">size_t</span> hashFunction (<span class="keyword">const</span> T &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<unsigned char> (*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
<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>