blob: c94c7ce93be6c2b233a259dd30b4627c8b2e70e0 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>oscl_map.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.2.18 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; </center>
<hr><h1>oscl_map.h</h1><a href="oscl__map_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">// -*- c++ -*-</span>
00002 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
00003
00004 <span class="comment">// O S C L _ M A P</span>
00005
00006 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
00007
00018 <span class="preprocessor">#ifndef OSCL_MAP_H_INCLUDED</span>
00019 <span class="preprocessor"></span><span class="preprocessor">#define OSCL_MAP_H_INCLUDED</span>
00020 <span class="preprocessor"></span>
00021 <span class="preprocessor">#ifndef OSCL_BASE_H_INCLUDED</span>
00022 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__base_8h.html">oscl_base.h</a>"</span>
00023 <span class="preprocessor">#endif</span>
00024 <span class="preprocessor"></span>
00025 <span class="preprocessor">#ifndef OSCL_TREE_H_INCLUDED</span>
00026 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__tree_8h.html">oscl_tree.h</a>"</span>
00027 <span class="preprocessor">#endif</span>
00028 <span class="preprocessor"></span>
<a name="l00029"></a><a class="code" href="oscl__map_8h.html#a0">00029</a> <span class="preprocessor">#define OSCL_DISABLE_WARNING_TRUNCATE_DEBUG_MESSAGE</span>
00030 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="osclconfig__compiler__warnings_8h.html">osclconfig_compiler_warnings.h</a>"</span>
00031
00032 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
<a name="l00033"></a><a class="code" href="structOscl__Less.html">00033</a> <span class="keyword">struct </span><a class="code" href="structOscl__Less.html">Oscl_Less</a>
00034 {
<a name="l00035"></a><a class="code" href="structOscl__Less.html#a0">00035</a> <span class="keywordtype">bool</span> <a class="code" href="structOscl__Less.html#a0">operator()</a>(<span class="keyword">const</span> T&amp; x, <span class="keyword">const</span> T&amp; y)<span class="keyword"> const</span>
00036 <span class="keyword"> </span>{
00037 <span class="keywordflow">return</span> x &lt; y ? <span class="keyword">true</span> : <span class="keyword">false</span> ;
00038 }
00039 };
00040
00041 <span class="keyword">template</span> &lt;<span class="keyword">class</span> V, <span class="keyword">class</span> U&gt;
<a name="l00042"></a><a class="code" href="structOscl__Select1st.html">00042</a> <span class="keyword">struct </span><a class="code" href="structOscl__Select1st.html">Oscl_Select1st</a>
00043 {
<a name="l00044"></a><a class="code" href="structOscl__Select1st.html#a0">00044</a> <span class="keyword">const</span> U&amp; <a class="code" href="structOscl__Select1st.html#a0">operator()</a>(<span class="keyword">const</span> V&amp; x)<span class="keyword"> const</span>
00045 <span class="keyword"> </span>{
00046 <span class="keywordflow">return</span> x.first;
00047 }
00048 };
00049
00060 <span class="keyword">template</span> &lt; <span class="keyword">class</span> Key, <span class="keyword">class</span> T, <span class="keyword">class</span> Alloc, <span class="keyword">class</span> Compare = Oscl_Less&lt;Key&gt; &gt;
<a name="l00061"></a><a class="code" href="classOscl__Map.html">00061</a> <span class="keyword">class </span><a class="code" href="classOscl__Map.html">Oscl_Map</a>
00062 {
00063
00064 <span class="keyword">public</span>:
<a name="l00065"></a><a class="code" href="classOscl__Map.html#s0">00065</a> <span class="keyword">typedef</span> Key <a class="code" href="classOscl__Map.html#s0">key_type</a>;
<a name="l00066"></a><a class="code" href="classOscl__Map.html#s1">00066</a> <span class="keyword">typedef</span> Compare <a class="code" href="structOscl__Tag__Base.html">key_compare</a>;
<a name="l00067"></a><a class="code" href="classOscl__Map.html#s2">00067</a> <span class="keyword">typedef</span> <a class="code" href="structOscl__Pair.html">Oscl_Pair&lt;const Key, T&gt;</a> <a class="code" href="structOscl__Pair.html">value_type</a>;
<a name="l00068"></a><a class="code" href="classOscl__Map.html#s3">00068</a> <span class="keyword">typedef</span> <a class="code" href="classOscl__Map.html">Oscl_Map&lt;Key, T, Alloc, Compare&gt;</a> <a class="code" href="classOscl__Map.html">self</a>;
00069
00070 <span class="keyword">private</span>:
00071 <span class="keyword">typedef</span> <a class="code" href="classOscl__Rb__Tree.html">Oscl_Rb_Tree</a> &lt; <a class="code" href="classOscl__Map.html#s0">key_type</a>, value_type,
00072 <a class="code" href="structOscl__Select1st.html">Oscl_Select1st&lt;value_type, key_type&gt;</a>,
00073 <a class="code" href="structOscl__Tag__Base.html">key_compare</a>, Alloc &gt; <a class="code" href="classOscl__Rb__Tree.html">rep_type</a>;
00074 <a class="code" href="classOscl__Rb__Tree.html">rep_type</a> t; <span class="comment">// red-black tree representing map</span>
00075
00076 <span class="keyword">public</span>:
<a name="l00077"></a><a class="code" href="classOscl__Map.html#s4">00077</a> <span class="keyword">typedef</span> <span class="keyword">typename</span> rep_type::pointer <a class="code" href="classOscl__Map.html#s4">pointer</a>;
<a name="l00078"></a><a class="code" href="classOscl__Map.html#s5">00078</a> <span class="keyword">typedef</span> <span class="keyword">typename</span> rep_type::reference <a class="code" href="classOscl__Map.html#s5">reference</a>;
<a name="l00079"></a><a class="code" href="classOscl__Map.html#s6">00079</a> <span class="keyword">typedef</span> <span class="keyword">typename</span> rep_type::const_reference <a class="code" href="classOscl__Map.html#s6">const_reference</a>;
<a name="l00080"></a><a class="code" href="classOscl__Map.html#s7">00080</a> <span class="keyword">typedef</span> <span class="keyword">typename</span> rep_type::iterator <a class="code" href="classOscl__Map.html#s7">iterator</a>;
<a name="l00081"></a><a class="code" href="classOscl__Map.html#s8">00081</a> <span class="keyword">typedef</span> <span class="keyword">typename</span> rep_type::const_iterator <a class="code" href="classOscl__Map.html#s8">const_iterator</a>;
<a name="l00082"></a><a class="code" href="classOscl__Map.html#s9">00082</a> <span class="keyword">typedef</span> <span class="keyword">typename</span> rep_type::size_type <a class="code" href="classOscl__Map.html#s9">size_type</a>;
00083
<a name="l00084"></a><a class="code" href="classOscl__Map_1_1value__compare.html">00084</a> <span class="keyword">class </span><a class="code" href="classOscl__Map_1_1value__compare.html">value_compare</a>
00085 {
<a name="l00086"></a><a class="code" href="classOscl__Map_1_1value__compare.html#l0">00086</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOscl__Map.html">Oscl_Map</a>&lt;Key, T, Alloc, Compare&gt;;
00087 <span class="keyword">protected</span> :
<a name="l00088"></a><a class="code" href="classOscl__Map_1_1value__compare.html#n0">00088</a> Compare <a class="code" href="classOscl__Map_1_1value__compare.html#n0">comp</a>;
<a name="l00089"></a><a class="code" href="classOscl__Map_1_1value__compare.html#b0">00089</a> <a class="code" href="classOscl__Map_1_1value__compare.html#b0">value_compare</a>(Compare c) : <a class="code" href="classOscl__Map_1_1value__compare.html#n0">comp</a>(c) {}
00090 <span class="keyword">public</span>:
<a name="l00091"></a><a class="code" href="classOscl__Map_1_1value__compare.html#a0">00091</a> <span class="keywordtype">bool</span> <a class="code" href="classOscl__Map_1_1value__compare.html#a0">operator()</a>(<span class="keyword">const</span> value_type&amp; x, <span class="keyword">const</span> value_type&amp; y)<span class="keyword"> const</span>
00092 <span class="keyword"> </span>{
00093 <span class="keywordflow">return</span> <a class="code" href="classOscl__Map_1_1value__compare.html#n0">comp</a>(x.<a class="code" href="structOscl__Pair.html#m0">first</a>, y.<a class="code" href="structOscl__Pair.html#m0">first</a>);
00094 }
00095 };
00096
00097 <span class="keyword">public</span>:
00098
<a name="l00102"></a><a class="code" href="classOscl__Map.html#a0">00102</a> <a class="code" href="classOscl__Map.html#a0">Oscl_Map</a>(<span class="keyword">const</span> Compare&amp; comp = Compare()) : t(comp) {}
00103 <span class="comment">// Oscl_Map(const value_type* first, const value_type* last,</span>
00104 <span class="comment">// const Compare&amp; comp = Compare()) : t(first, last, comp, false) {}</span>
00105
<a name="l00109"></a><a class="code" href="classOscl__Map.html#a1">00109</a> <a class="code" href="classOscl__Map.html#a0">Oscl_Map</a>(<span class="keyword">const</span> self&amp; x) : t(x.t) {}
<a name="l00113"></a><a class="code" href="classOscl__Map.html#a2">00113</a> self&amp; <a class="code" href="classOscl__Map.html#a2">operator=</a>(<span class="keyword">const</span> self&amp; x)
00114 {
00115 t = x.<a class="code" href="classOscl__Map.html#o0">t</a>;
00116 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
00117 }
<a name="l00121"></a><a class="code" href="classOscl__Map.html#a3">00121</a> key_compare <a class="code" href="classOscl__Map.html#a3">key_comp</a>()<span class="keyword"> const</span>
00122 <span class="keyword"> </span>{
00123 <span class="keywordflow">return</span> t.key_comp();
00124 }
<a name="l00128"></a><a class="code" href="classOscl__Map.html#a4">00128</a> value_compare <a class="code" href="classOscl__Map.html#a4">value_comp</a>()<span class="keyword"> const</span>
00129 <span class="keyword"> </span>{
00130 <span class="keywordflow">return</span> value_compare(t.key_comp());
00131 }
<a name="l00135"></a><a class="code" href="classOscl__Map.html#a5">00135</a> <a class="code" href="classOscl__Map.html#s7">iterator</a> <a class="code" href="classOscl__Map.html#a5">begin</a>()
00136 {
00137 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a4">begin</a>();
00138 }
<a name="l00142"></a><a class="code" href="classOscl__Map.html#a6">00142</a> <a class="code" href="classOscl__Map.html#s8">const_iterator</a> <a class="code" href="classOscl__Map.html#a5">begin</a>()<span class="keyword"> const</span>
00143 <span class="keyword"> </span>{
00144 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a4">begin</a>();
00145 }
<a name="l00149"></a><a class="code" href="classOscl__Map.html#a7">00149</a> <a class="code" href="classOscl__Map.html#s7">iterator</a> <a class="code" href="classOscl__Map.html#a7">end</a>()
00150 {
00151 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a6">end</a>();
00152 }
<a name="l00156"></a><a class="code" href="classOscl__Map.html#a8">00156</a> <a class="code" href="classOscl__Map.html#s8">const_iterator</a> <a class="code" href="classOscl__Map.html#a7">end</a>()<span class="keyword"> const</span>
00157 <span class="keyword"> </span>{
00158 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a6">end</a>();
00159 }
<a name="l00163"></a><a class="code" href="classOscl__Map.html#a9">00163</a> <span class="keywordtype">bool</span> <a class="code" href="classOscl__Map.html#a9">empty</a>()<span class="keyword"> const</span>
00164 <span class="keyword"> </span>{
00165 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a8">empty</a>();
00166 }
<a name="l00170"></a><a class="code" href="classOscl__Map.html#a10">00170</a> <a class="code" href="classOscl__Map.html#s9">size_type</a> <a class="code" href="classOscl__Map.html#a10">size</a>()<span class="keyword"> const</span>
00171 <span class="keyword"> </span>{
00172 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a9">size</a>();
00173 }
<a name="l00177"></a><a class="code" href="classOscl__Map.html#a11">00177</a> <a class="code" href="classOscl__Map.html#s9">size_type</a> <a class="code" href="classOscl__Map.html#a11">max_size</a>()<span class="keyword"> const</span>
00178 <span class="keyword"> </span>{
00179 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a10">max_size</a>();
00180 }
<a name="l00185"></a><a class="code" href="classOscl__Map.html#a12">00185</a> T&amp; <a class="code" href="classOscl__Map.html#a12">operator[]</a>(<span class="keyword">const</span> key_type&amp; k)
00186 {
00187 <span class="keywordflow">return</span> (*((<a class="code" href="classOscl__Map.html#a13">insert</a>(<a class="code" href="classOscl__Map.html#s2">value_type</a>(k, T()))).first)).second;
00188 }
00189 <span class="comment">// void swap(map&lt;Key, T, Compare&gt;&amp; x) { t.swap(x.t); }</span>
00190
00191
<a name="l00192"></a><a class="code" href="classOscl__Map.html#s10">00192</a> <span class="keyword">typedef</span> <a class="code" href="structOscl__Pair.html">Oscl_Pair&lt;iterator, bool&gt;</a> <a class="code" href="structOscl__Pair.html">pair_iterator_bool</a>;
<a name="l00196"></a><a class="code" href="classOscl__Map.html#a13">00196</a> pair_iterator_bool <a class="code" href="classOscl__Map.html#a13">insert</a>(<span class="keyword">const</span> value_type&amp; x)
00197 {
00198 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a11">insert_unique</a>(x);
00199 }
<a name="l00203"></a><a class="code" href="classOscl__Map.html#a14">00203</a> <a class="code" href="classOscl__Map.html#s7">iterator</a> <a class="code" href="classOscl__Map.html#a13">insert</a>(<a class="code" href="classOscl__Map.html#s7">iterator</a> position, <span class="keyword">const</span> value_type&amp; x)
00204 {
00205 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a11">insert_unique</a>(position, x);
00206 }
<a name="l00210"></a><a class="code" href="classOscl__Map.html#a15">00210</a> <span class="keywordtype">void</span> <a class="code" href="classOscl__Map.html#a13">insert</a>(<span class="keyword">const</span> value_type* first, <span class="keyword">const</span> value_type* last)
00211 {
00212 t.<a class="code" href="classOscl__Rb__Tree.html#a11">insert_unique</a>(first, last);
00213 }
<a name="l00217"></a><a class="code" href="classOscl__Map.html#a16">00217</a> <span class="keywordtype">void</span> <a class="code" href="classOscl__Map.html#a16">erase</a>(<a class="code" href="classOscl__Map.html#s7">iterator</a> position)
00218 {
00219 t.<a class="code" href="classOscl__Rb__Tree.html#a15">erase</a>(position);
00220 }
<a name="l00224"></a><a class="code" href="classOscl__Map.html#a17">00224</a> <a class="code" href="classOscl__Map.html#s9">size_type</a> <a class="code" href="classOscl__Map.html#a16">erase</a>(<span class="keyword">const</span> key_type&amp; x)
00225 {
00226 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a15">erase</a>(x);
00227 }
<a name="l00231"></a><a class="code" href="classOscl__Map.html#a18">00231</a> <span class="keywordtype">void</span> <a class="code" href="classOscl__Map.html#a16">erase</a>(<a class="code" href="classOscl__Map.html#s7">iterator</a> first, <a class="code" href="classOscl__Map.html#s7">iterator</a> last)
00232 {
00233 t.<a class="code" href="classOscl__Rb__Tree.html#a15">erase</a>(first, last);
00234 }
<a name="l00238"></a><a class="code" href="classOscl__Map.html#a19">00238</a> <span class="keywordtype">void</span> <a class="code" href="classOscl__Map.html#a19">clear</a>()
00239 {
00240 t.<a class="code" href="classOscl__Rb__Tree.html#a19">clear</a>();
00241 }
<a name="l00245"></a><a class="code" href="classOscl__Map.html#a20">00245</a> <a class="code" href="classOscl__Map.html#s7">iterator</a> <a class="code" href="classOscl__Map.html#a20">find</a>(<span class="keyword">const</span> key_type&amp; x)
00246 {
00247 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a20">find</a>(x);
00248 }
<a name="l00252"></a><a class="code" href="classOscl__Map.html#a21">00252</a> <a class="code" href="classOscl__Map.html#s8">const_iterator</a> <a class="code" href="classOscl__Map.html#a20">find</a>(<span class="keyword">const</span> key_type&amp; x)<span class="keyword"> const</span>
00253 <span class="keyword"> </span>{
00254 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a20">find</a>(x);
00255 }
<a name="l00259"></a><a class="code" href="classOscl__Map.html#a22">00259</a> <a class="code" href="classOscl__Map.html#s9">size_type</a> <a class="code" href="classOscl__Map.html#a22">count</a>(<span class="keyword">const</span> key_type&amp; x)<span class="keyword"> const</span>
00260 <span class="keyword"> </span>{
00261 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a22">count</a>(x);
00262 }
<a name="l00266"></a><a class="code" href="classOscl__Map.html#a23">00266</a> <a class="code" href="classOscl__Map.html#s7">iterator</a> <a class="code" href="classOscl__Map.html#a23">lower_bound</a>(<span class="keyword">const</span> key_type&amp; x)
00267 {
00268 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a23">lower_bound</a>(x);
00269 }
<a name="l00273"></a><a class="code" href="classOscl__Map.html#a24">00273</a> <a class="code" href="classOscl__Map.html#s8">const_iterator</a> <a class="code" href="classOscl__Map.html#a23">lower_bound</a>(<span class="keyword">const</span> key_type&amp; x)<span class="keyword"> const</span>
00274 <span class="keyword"> </span>{
00275 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a23">lower_bound</a>(x);
00276 }
<a name="l00280"></a><a class="code" href="classOscl__Map.html#a25">00280</a> <a class="code" href="classOscl__Map.html#s7">iterator</a> <a class="code" href="classOscl__Map.html#a25">upper_bound</a>(<span class="keyword">const</span> key_type&amp; x)
00281 {
00282 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a25">upper_bound</a>(x);
00283 }
<a name="l00287"></a><a class="code" href="classOscl__Map.html#a26">00287</a> <a class="code" href="classOscl__Map.html#s8">const_iterator</a> <a class="code" href="classOscl__Map.html#a25">upper_bound</a>(<span class="keyword">const</span> key_type&amp; x)<span class="keyword"> const</span>
00288 <span class="keyword"> </span>{
00289 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a25">upper_bound</a>(x);
00290 }
<a name="l00291"></a><a class="code" href="classOscl__Map.html#s11">00291</a> <span class="keyword">typedef</span> <a class="code" href="structOscl__Pair.html">Oscl_Pair&lt;iterator, iterator&gt;</a> <a class="code" href="structOscl__Pair.html">pair_iterator_iterator</a>;
<a name="l00295"></a><a class="code" href="classOscl__Map.html#a27">00295</a> pair_iterator_iterator <a class="code" href="classOscl__Map.html#a27">equal_range</a>(<span class="keyword">const</span> key_type&amp; x)
00296 {
00297 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a27">equal_range</a>(x);
00298 }
<a name="l00299"></a><a class="code" href="classOscl__Map.html#s12">00299</a> <span class="keyword">typedef</span> <a class="code" href="structOscl__Pair.html">Oscl_Pair&lt;const_iterator, const_iterator&gt;</a> <a class="code" href="structOscl__Pair.html">pair_citerator_citerator</a>;
<a name="l00303"></a><a class="code" href="classOscl__Map.html#a28">00303</a> pair_citerator_citerator <a class="code" href="classOscl__Map.html#a27">equal_range</a>(<span class="keyword">const</span> key_type&amp; x)<span class="keyword"> const</span>
00304 <span class="keyword"> </span>{
00305 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a27">equal_range</a>(x);
00306 }
00307
00308 <span class="keyword">private</span>:
00309
00310 };
00311
00312 <span class="comment">//template &lt;class Key, class T, class Compare&gt;</span>
00313 <span class="comment">//inline bool operator==(const map&lt;Key, T, Compare&gt;&amp; x,</span>
00314 <span class="comment">// const map&lt;Key, T, Compare&gt;&amp; y) {</span>
00315 <span class="comment">// return x.size() == y.size() &amp;&amp; equal(x.begin(), x.end(), y.begin());</span>
00316 <span class="comment">//}</span>
00317
00318 <span class="comment">//template &lt;class Key, class T, class Compare&gt;</span>
00319 <span class="comment">//inline bool operator&lt;(const map&lt;Key, T, Compare&gt;&amp; x,</span>
00320 <span class="comment">// const map&lt;Key, T, Compare&gt;&amp; y) {</span>
00321 <span class="comment">// return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());</span>
00322 <span class="comment">//}</span>
00323
00324
00328 <span class="preprocessor">#endif</span>
</pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
<address style="align: left;"><small>Posting Version: OPENCORE_20090310 </small>
</small></address>
</body>
</html>