1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 2 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> 3 <title>oscl_map.h Source File</title> 4 <link href="doxygen.css" rel="stylesheet" type="text/css"> 5 </head><body> 6 <!-- Generated by Doxygen 1.2.18 --> 7 <center> 8 <a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="modules.html">Modules</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Data Structures</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Data Fields</a> <a class="qindex" href="globals.html">Globals</a> </center> 9 <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> 10 00002 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span> 11 00003 12 00004 <span class="comment">// O S C L _ M A P</span> 13 00005 14 00006 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span> 15 00007 16 00018 <span class="preprocessor">#ifndef OSCL_MAP_H_INCLUDED</span> 17 00019 <span class="preprocessor"></span><span class="preprocessor">#define OSCL_MAP_H_INCLUDED</span> 18 00020 <span class="preprocessor"></span> 19 00021 <span class="preprocessor">#ifndef OSCL_BASE_H_INCLUDED</span> 20 00022 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__base_8h.html">oscl_base.h</a>"</span> 21 00023 <span class="preprocessor">#endif</span> 22 00024 <span class="preprocessor"></span> 23 00025 <span class="preprocessor">#ifndef OSCL_TREE_H_INCLUDED</span> 24 00026 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__tree_8h.html">oscl_tree.h</a>"</span> 25 00027 <span class="preprocessor">#endif</span> 26 00028 <span class="preprocessor"></span> 27 <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> 28 00030 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="osclconfig__compiler__warnings_8h.html">osclconfig_compiler_warnings.h</a>"</span> 29 00031 30 00032 <span class="keyword">template</span> <<span class="keyword">class</span> T> 31 <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> 32 00034 { 33 <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& x, <span class="keyword">const</span> T& y)<span class="keyword"> const</span> 34 00036 <span class="keyword"> </span>{ 35 00037 <span class="keywordflow">return</span> x < y ? <span class="keyword">true</span> : <span class="keyword">false</span> ; 36 00038 } 37 00039 }; 38 00040 39 00041 <span class="keyword">template</span> <<span class="keyword">class</span> V, <span class="keyword">class</span> U> 40 <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> 41 00043 { 42 <a name="l00044"></a><a class="code" href="structOscl__Select1st.html#a0">00044</a> <span class="keyword">const</span> U& <a class="code" href="structOscl__Select1st.html#a0">operator()</a>(<span class="keyword">const</span> V& x)<span class="keyword"> const</span> 43 00045 <span class="keyword"> </span>{ 44 00046 <span class="keywordflow">return</span> x.first; 45 00047 } 46 00048 }; 47 00049 48 00060 <span class="keyword">template</span> < <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<Key> > 49 <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> 50 00062 { 51 00063 52 00064 <span class="keyword">public</span>: 53 <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>; 54 <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>; 55 <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<const Key, T></a> <a class="code" href="structOscl__Pair.html">value_type</a>; 56 <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<Key, T, Alloc, Compare></a> <a class="code" href="classOscl__Map.html">self</a>; 57 00069 58 00070 <span class="keyword">private</span>: 59 00071 <span class="keyword">typedef</span> <a class="code" href="classOscl__Rb__Tree.html">Oscl_Rb_Tree</a> < <a class="code" href="classOscl__Map.html#s0">key_type</a>, value_type, 60 00072 <a class="code" href="structOscl__Select1st.html">Oscl_Select1st<value_type, key_type></a>, 61 00073 <a class="code" href="structOscl__Tag__Base.html">key_compare</a>, Alloc > <a class="code" href="classOscl__Rb__Tree.html">rep_type</a>; 62 00074 <a class="code" href="classOscl__Rb__Tree.html">rep_type</a> t; <span class="comment">// red-black tree representing map</span> 63 00075 64 00076 <span class="keyword">public</span>: 65 <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>; 66 <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>; 67 <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>; 68 <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>; 69 <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>; 70 <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>; 71 00083 72 <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> 73 00085 { 74 <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><Key, T, Alloc, Compare>; 75 00087 <span class="keyword">protected</span> : 76 <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>; 77 <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) {} 78 00090 <span class="keyword">public</span>: 79 <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& x, <span class="keyword">const</span> value_type& y)<span class="keyword"> const</span> 80 00092 <span class="keyword"> </span>{ 81 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>); 82 00094 } 83 00095 }; 84 00096 85 00097 <span class="keyword">public</span>: 86 00098 87 <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& comp = Compare()) : t(comp) {} 88 00103 <span class="comment">// Oscl_Map(const value_type* first, const value_type* last,</span> 89 00104 <span class="comment">// const Compare& comp = Compare()) : t(first, last, comp, false) {}</span> 90 00105 91 <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& x) : t(x.t) {} 92 <a name="l00113"></a><a class="code" href="classOscl__Map.html#a2">00113</a> self& <a class="code" href="classOscl__Map.html#a2">operator=</a>(<span class="keyword">const</span> self& x) 93 00114 { 94 00115 t = x.<a class="code" href="classOscl__Map.html#o0">t</a>; 95 00116 <span class="keywordflow">return</span> *<span class="keyword">this</span>; 96 00117 } 97 <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> 98 00122 <span class="keyword"> </span>{ 99 00123 <span class="keywordflow">return</span> t.key_comp(); 100 00124 } 101 <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> 102 00129 <span class="keyword"> </span>{ 103 00130 <span class="keywordflow">return</span> value_compare(t.key_comp()); 104 00131 } 105 <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>() 106 00136 { 107 00137 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a4">begin</a>(); 108 00138 } 109 <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> 110 00143 <span class="keyword"> </span>{ 111 00144 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a4">begin</a>(); 112 00145 } 113 <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>() 114 00150 { 115 00151 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a6">end</a>(); 116 00152 } 117 <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> 118 00157 <span class="keyword"> </span>{ 119 00158 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a6">end</a>(); 120 00159 } 121 <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> 122 00164 <span class="keyword"> </span>{ 123 00165 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a8">empty</a>(); 124 00166 } 125 <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> 126 00171 <span class="keyword"> </span>{ 127 00172 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a9">size</a>(); 128 00173 } 129 <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> 130 00178 <span class="keyword"> </span>{ 131 00179 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a10">max_size</a>(); 132 00180 } 133 <a name="l00185"></a><a class="code" href="classOscl__Map.html#a12">00185</a> T& <a class="code" href="classOscl__Map.html#a12">operator[]</a>(<span class="keyword">const</span> key_type& k) 134 00186 { 135 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; 136 00188 } 137 00189 <span class="comment">// void swap(map<Key, T, Compare>& x) { t.swap(x.t); }</span> 138 00190 139 00191 140 <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<iterator, bool></a> <a class="code" href="structOscl__Pair.html">pair_iterator_bool</a>; 141 <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& x) 142 00197 { 143 00198 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a11">insert_unique</a>(x); 144 00199 } 145 <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& x) 146 00204 { 147 00205 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a11">insert_unique</a>(position, x); 148 00206 } 149 <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) 150 00211 { 151 00212 t.<a class="code" href="classOscl__Rb__Tree.html#a11">insert_unique</a>(first, last); 152 00213 } 153 <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) 154 00218 { 155 00219 t.<a class="code" href="classOscl__Rb__Tree.html#a15">erase</a>(position); 156 00220 } 157 <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& x) 158 00225 { 159 00226 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a15">erase</a>(x); 160 00227 } 161 <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) 162 00232 { 163 00233 t.<a class="code" href="classOscl__Rb__Tree.html#a15">erase</a>(first, last); 164 00234 } 165 <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>() 166 00239 { 167 00240 t.<a class="code" href="classOscl__Rb__Tree.html#a19">clear</a>(); 168 00241 } 169 <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& x) 170 00246 { 171 00247 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a20">find</a>(x); 172 00248 } 173 <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& x)<span class="keyword"> const</span> 174 00253 <span class="keyword"> </span>{ 175 00254 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a20">find</a>(x); 176 00255 } 177 <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& x)<span class="keyword"> const</span> 178 00260 <span class="keyword"> </span>{ 179 00261 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a22">count</a>(x); 180 00262 } 181 <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& x) 182 00267 { 183 00268 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a23">lower_bound</a>(x); 184 00269 } 185 <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& x)<span class="keyword"> const</span> 186 00274 <span class="keyword"> </span>{ 187 00275 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a23">lower_bound</a>(x); 188 00276 } 189 <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& x) 190 00281 { 191 00282 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a25">upper_bound</a>(x); 192 00283 } 193 <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& x)<span class="keyword"> const</span> 194 00288 <span class="keyword"> </span>{ 195 00289 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a25">upper_bound</a>(x); 196 00290 } 197 <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<iterator, iterator></a> <a class="code" href="structOscl__Pair.html">pair_iterator_iterator</a>; 198 <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& x) 199 00296 { 200 00297 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a27">equal_range</a>(x); 201 00298 } 202 <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<const_iterator, const_iterator></a> <a class="code" href="structOscl__Pair.html">pair_citerator_citerator</a>; 203 <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& x)<span class="keyword"> const</span> 204 00304 <span class="keyword"> </span>{ 205 00305 <span class="keywordflow">return</span> t.<a class="code" href="classOscl__Rb__Tree.html#a27">equal_range</a>(x); 206 00306 } 207 00307 208 00308 <span class="keyword">private</span>: 209 00309 210 00310 }; 211 00311 212 00312 <span class="comment">//template <class Key, class T, class Compare></span> 213 00313 <span class="comment">//inline bool operator==(const map<Key, T, Compare>& x,</span> 214 00314 <span class="comment">// const map<Key, T, Compare>& y) {</span> 215 00315 <span class="comment">// return x.size() == y.size() && equal(x.begin(), x.end(), y.begin());</span> 216 00316 <span class="comment">//}</span> 217 00317 218 00318 <span class="comment">//template <class Key, class T, class Compare></span> 219 00319 <span class="comment">//inline bool operator<(const map<Key, T, Compare>& x,</span> 220 00320 <span class="comment">// const map<Key, T, Compare>& y) {</span> 221 00321 <span class="comment">// return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());</span> 222 00322 <span class="comment">//}</span> 223 00323 224 00324 225 00328 <span class="preprocessor">#endif</span> 226 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small> 227 <address style="align: left;"><small>Posting Version: OPENCORE_20090310 </small> 228 </small></address> 229 </body> 230 </html> 231