paradiseo/trunk/paradiseo-eo/doc/html/eo_real_bounds_8h-source.html
legrand c3aec878e5 Paradiseo-eo sources added
git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@40 331e1502-861f-0410-8da2-ba01fb791d7f
2006-12-12 14:49:08 +00:00

493 lines
52 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>EO: eoRealBounds.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
<div class="qindex"> <form class="search" action="search.php" method="get">
<a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a> | <span class="search"><u>S</u>earch&nbsp;for&nbsp;<input class="search" type="text" name="query" value="" size="20" accesskey="s"/></span></form></div>
<div class="nav">
<a class="el" href="dir_000000.html">src</a>&nbsp;/&nbsp;<a class="el" href="dir_000011.html">utils</a></div>
<h1>eoRealBounds.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-</span>
00002
00003 <span class="comment">//-----------------------------------------------------------------------------</span>
00004 <span class="comment">// eoRealBounds.h</span>
00005 <span class="comment">// (c) Marc Schoenauer 2001, Maarten Keijzer 2000, GeNeura Team, 1998</span>
00006 <span class="comment">/* </span>
00007 <span class="comment"> This library is free software; you can redistribute it and/or</span>
00008 <span class="comment"> modify it under the terms of the GNU Lesser General Public</span>
00009 <span class="comment"> License as published by the Free Software Foundation; either</span>
00010 <span class="comment"> version 2 of the License, or (at your option) any later version.</span>
00011 <span class="comment"></span>
00012 <span class="comment"> This library is distributed in the hope that it will be useful,</span>
00013 <span class="comment"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
00014 <span class="comment"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span>
00015 <span class="comment"> Lesser General Public License for more details.</span>
00016 <span class="comment"></span>
00017 <span class="comment"> You should have received a copy of the GNU Lesser General Public</span>
00018 <span class="comment"> License along with this library; if not, write to the Free Software</span>
00019 <span class="comment"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span>
00020 <span class="comment"></span>
00021 <span class="comment"> Contact: todos@geneura.ugr.es, http://geneura.ugr.es</span>
00022 <span class="comment"> Marc.Schoenauer@polytechnique.fr</span>
00023 <span class="comment"> mak@dhi.dk</span>
00024 <span class="comment"> */</span>
00025 <span class="comment">//-----------------------------------------------------------------------------</span>
00026
00027 <span class="preprocessor">#ifndef _eoRealBounds_h</span>
00028 <span class="preprocessor"></span><span class="preprocessor">#define _eoRealBounds_h</span>
00029 <span class="preprocessor"></span>
00030 <span class="preprocessor">#include &lt;stdexcept&gt;</span> <span class="comment">// std::exceptions!</span>
00031 <span class="preprocessor">#include &lt;utils/eoRNG.h&gt;</span>
00032
<a name="l00075"></a><a class="code" href="classeo_real_bounds.html">00075</a> <span class="keyword">class </span><a class="code" href="classeo_real_bounds.html">eoRealBounds</a> : <span class="keyword">public</span> <a class="code" href="classeo_persistent.html">eoPersistent</a>
00076 {
00077 <span class="keyword">public</span>:
00078 <span class="keyword">virtual</span> ~<a class="code" href="classeo_real_bounds.html">eoRealBounds</a>(){}
00079
00082 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_bounds.html#a1">isBounded</a>(<span class="keywordtype">void</span>) <span class="keyword">const </span>= 0;
00083
00087 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_bounds.html#a2">hasNoBoundAtAll</a>(<span class="keywordtype">void</span>) <span class="keyword">const </span>= 0;
00088
00091 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_bounds.html#a3">isMinBounded</a>(<span class="keywordtype">void</span>) <span class="keyword">const </span>= 0;
00092
00095 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_bounds.html#a4">isMaxBounded</a>(<span class="keywordtype">void</span>) <span class="keyword">const </span>= 0;
00096
00099 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_bounds.html#a5">isInBounds</a>(<span class="keywordtype">double</span>) <span class="keyword">const </span>= 0;
00100
00103 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_bounds.html#a6">foldsInBounds</a>(<span class="keywordtype">double</span> &amp;) <span class="keyword">const </span>= 0;
00104
00107 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_bounds.html#a7">truncate</a>(<span class="keywordtype">double</span> &amp;) <span class="keyword">const </span>= 0;
00108
00112 <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_bounds.html#a8">minimum</a>() <span class="keyword">const </span>= 0 ;
00116 <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_bounds.html#a9">maximum</a>() <span class="keyword">const </span>= 0 ;
00120 <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_bounds.html#a10">range</a>() <span class="keyword">const </span>= 0;
00121
00125 <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_bounds.html#a11">uniform</a>(<a class="code" href="classeo_rng.html">eoRng</a> &amp; _rng = eo::rng) <span class="keyword">const </span>= 0;
00126
00128 <span class="keyword">virtual</span> <a class="code" href="classeo_real_bounds.html">eoRealBounds</a> * <a class="code" href="classeo_real_bounds.html#a12">dup</a>() <span class="keyword">const </span>= 0;
00129 };
00130
<a name="l00133"></a><a class="code" href="classeo_real_no_bounds.html">00133</a> <span class="keyword">class </span><a class="code" href="classeo_real_no_bounds.html">eoRealNoBounds</a> : <span class="keyword">public</span> <a class="code" href="classeo_real_bounds.html">eoRealBounds</a>
00134 {
00135 <span class="keyword">public</span>:
00136 <span class="keyword">virtual</span> ~<a class="code" href="classeo_real_no_bounds.html">eoRealNoBounds</a>(){}
00137
<a name="l00138"></a><a class="code" href="classeo_real_no_bounds.html#a1">00138</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_no_bounds.html#a1">isBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}
<a name="l00139"></a><a class="code" href="classeo_real_no_bounds.html#a2">00139</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_no_bounds.html#a2">hasNoBoundAtAll</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}
<a name="l00140"></a><a class="code" href="classeo_real_no_bounds.html#a3">00140</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_no_bounds.html#a3">isMinBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}
<a name="l00141"></a><a class="code" href="classeo_real_no_bounds.html#a4">00141</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_no_bounds.html#a4">isMaxBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}
<a name="l00142"></a><a class="code" href="classeo_real_no_bounds.html#a5">00142</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_no_bounds.html#a5">foldsInBounds</a>(<span class="keywordtype">double</span> &amp;)<span class="keyword"> const </span>{<span class="keywordflow">return</span>;}
<a name="l00143"></a><a class="code" href="classeo_real_no_bounds.html#a6">00143</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_no_bounds.html#a6">truncate</a>(<span class="keywordtype">double</span> &amp;)<span class="keyword"> const </span>{<span class="keywordflow">return</span>;}
<a name="l00144"></a><a class="code" href="classeo_real_no_bounds.html#a7">00144</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_no_bounds.html#a7">isInBounds</a>(<span class="keywordtype">double</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}
00145
<a name="l00146"></a><a class="code" href="classeo_real_no_bounds.html#a8">00146</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_no_bounds.html#a8">minimum</a>()<span class="keyword"> const</span>
00147 <span class="keyword"> </span>{
00148 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to get minimum of unbounded eoRealBounds"</span>);
00149 }
<a name="l00150"></a><a class="code" href="classeo_real_no_bounds.html#a9">00150</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_no_bounds.html#a9">maximum</a>()<span class="keyword"> const </span>
00151 <span class="keyword"> </span>{
00152 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to get maximum of unbounded eoRealBounds"</span>);
00153 }
<a name="l00154"></a><a class="code" href="classeo_real_no_bounds.html#a10">00154</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_no_bounds.html#a10">range</a>()<span class="keyword"> const </span>
00155 <span class="keyword"> </span>{
00156 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to get range of unbounded eoRealBounds"</span>);
00157 }
00158
<a name="l00159"></a><a class="code" href="classeo_real_no_bounds.html#a11">00159</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_no_bounds.html#a11">uniform</a>(<a class="code" href="classeo_rng.html">eoRng</a> &amp; _rng = eo::rng)<span class="keyword"> const </span>
00160 <span class="keyword"> </span>{
00161 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to generate uniform values in unbounded eoRealBounds"</span>);
00162 }
00163
00164 <span class="comment">// methods from eoPersistent</span>
<a name="l00171"></a><a class="code" href="classeo_real_no_bounds.html#a12">00171</a> <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_no_bounds.html#a12">readFrom</a>(std::istream&amp; _is)
00172 {
00173 <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Should not use eoRealBounds::readFrom"</span>);
00174 }
00175
<a name="l00180"></a><a class="code" href="classeo_real_no_bounds.html#a13">00180</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_no_bounds.html#a13">printOn</a>(std::ostream&amp; _os)<span class="keyword"> const</span>
00181 <span class="keyword"> </span>{
00182 _os &lt;&lt; <span class="stringliteral">"[-inf,+inf]"</span>;
00183 }
00184
<a name="l00186"></a><a class="code" href="classeo_real_no_bounds.html#a14">00186</a> <span class="keyword">virtual</span> <a class="code" href="classeo_real_bounds.html">eoRealBounds</a> * <a class="code" href="classeo_real_no_bounds.html#a14">dup</a>()<span class="keyword"> const </span>
00187 <span class="keyword"> </span>{
00188 <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classeo_real_no_bounds.html">eoRealNoBounds</a>(*<span class="keyword">this</span>);
00189 }
00190
00191 };
00192
00193 <span class="comment">// one object for all - see eoRealBounds.cpp</span>
00194 <span class="keyword">extern</span> <a class="code" href="classeo_real_no_bounds.html">eoRealNoBounds</a> eoDummyRealNoBounds;
00195
<a name="l00199"></a><a class="code" href="classeo_real_interval.html">00199</a> <span class="keyword">class </span><a class="code" href="classeo_real_interval.html">eoRealInterval</a> : <span class="keyword">public</span> <a class="code" href="classeo_real_bounds.html">eoRealBounds</a>
00200 {
00201 <span class="keyword">public</span> :
00202 <span class="keyword">virtual</span> ~<a class="code" href="classeo_real_interval.html">eoRealInterval</a>(){}
00203
<a name="l00207"></a><a class="code" href="classeo_real_interval.html#a1">00207</a> <a class="code" href="classeo_real_interval.html#a1">eoRealInterval</a>(<span class="keywordtype">double</span> _min=0, <span class="keywordtype">double</span> _max=1) :
00208 repMinimum(_min), repMaximum(_max), repRange(_max-_min)
00209 {
00210 <span class="keywordflow">if</span> (repRange&lt;=0)
00211 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Void range in eoRealBounds"</span>);
00212 }
00213
00214 <span class="comment">// accessors </span>
<a name="l00215"></a><a class="code" href="classeo_real_interval.html#a2">00215</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_interval.html#a2">minimum</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> repMinimum; }
<a name="l00216"></a><a class="code" href="classeo_real_interval.html#a3">00216</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_interval.html#a3">maximum</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> repMaximum; }
<a name="l00217"></a><a class="code" href="classeo_real_interval.html#a4">00217</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_interval.html#a4">range</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> repRange; }
00218
00219 <span class="comment">// description</span>
<a name="l00220"></a><a class="code" href="classeo_real_interval.html#a5">00220</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_interval.html#a5">isBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}
<a name="l00221"></a><a class="code" href="classeo_real_interval.html#a6">00221</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_interval.html#a6">hasNoBoundAtAll</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}
<a name="l00222"></a><a class="code" href="classeo_real_interval.html#a7">00222</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_interval.html#a7">isMinBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}
<a name="l00223"></a><a class="code" href="classeo_real_interval.html#a8">00223</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_interval.html#a8">isMaxBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}
00224
<a name="l00225"></a><a class="code" href="classeo_real_interval.html#a9">00225</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_interval.html#a9">uniform</a>(<a class="code" href="classeo_rng.html">eoRng</a> &amp; _rng = eo::rng)<span class="keyword"> const </span>
00226 <span class="keyword"> </span>{
00227 <span class="keywordflow">return</span> repMinimum + _rng.<a class="code" href="classeo_real_bounds.html#a11">uniform</a>(repRange);
00228 }
00229
00230 <span class="comment">// says if a given double is within the bounds</span>
<a name="l00231"></a><a class="code" href="classeo_real_interval.html#a10">00231</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_interval.html#a10">isInBounds</a>(<span class="keywordtype">double</span> _r)<span class="keyword"> const </span>
00232 <span class="keyword"> </span>{
00233 <span class="keywordflow">if</span> (_r &lt; repMinimum)
00234 <span class="keywordflow">return</span> <span class="keyword">false</span>;
00235 <span class="keywordflow">if</span> (_r &gt; repMaximum)
00236 <span class="keywordflow">return</span> <span class="keyword">false</span>;
00237 <span class="keywordflow">return</span> <span class="keyword">true</span>;
00238 }
00239
00240 <span class="comment">// folds a value into bounds</span>
<a name="l00241"></a><a class="code" href="classeo_real_interval.html#a11">00241</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_interval.html#a11">foldsInBounds</a>(<span class="keywordtype">double</span> &amp; _r)<span class="keyword"> const </span>
00242 <span class="keyword"> </span>{
00243 <span class="keywordtype">long</span> iloc;
00244 <span class="keywordtype">double</span> dlargloc = 2 * <a class="code" href="classeo_real_interval.html#a4">range</a>() ;
00245
00246 <span class="keywordflow">if</span> (fabs(_r) &gt; 1.0E9) <span class="comment">// iloc too large!</span>
00247 {
00248 _r = <a class="code" href="classeo_real_interval.html#a9">uniform</a>();
00249 <span class="keywordflow">return</span>;
00250 }
00251
00252 <span class="keywordflow">if</span> ( (_r &gt; <a class="code" href="classeo_real_interval.html#a3">maximum</a>()) )
00253 {
00254 iloc = (long) ( (_r-<a class="code" href="classeo_real_interval.html#a2">minimum</a>()) / dlargloc ) ;
00255 _r -= dlargloc * iloc ;
00256 <span class="keywordflow">if</span> ( _r &gt; <a class="code" href="classeo_real_interval.html#a3">maximum</a>() )
00257 _r = 2*<a class="code" href="classeo_real_interval.html#a3">maximum</a>() - _r ;
00258 }
00259
00260 <span class="keywordflow">if</span> (_r &lt; <a class="code" href="classeo_real_interval.html#a2">minimum</a>())
00261 {
00262 iloc = (long) ( (<a class="code" href="classeo_real_interval.html#a3">maximum</a>()-_r) / dlargloc ) ;
00263 _r += dlargloc * iloc ;
00264 <span class="keywordflow">if</span> (_r &lt; <a class="code" href="classeo_real_interval.html#a2">minimum</a>())
00265 _r = 2*<a class="code" href="classeo_real_interval.html#a2">minimum</a>() - _r ;
00266 }
00267 }
00268
00269 <span class="comment">// truncates to the bounds</span>
<a name="l00270"></a><a class="code" href="classeo_real_interval.html#a12">00270</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_interval.html#a12">truncate</a>(<span class="keywordtype">double</span> &amp; _r)<span class="keyword"> const </span>
00271 <span class="keyword"> </span>{
00272 <span class="keywordflow">if</span> (_r &lt; repMinimum)
00273 _r = repMinimum;
00274 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (_r &gt; repMaximum)
00275 _r = repMaximum;
00276 <span class="keywordflow">return</span>;
00277 }
00278
00279 <span class="comment">// methods from eoPersistent</span>
<a name="l00286"></a><a class="code" href="classeo_real_interval.html#a13">00286</a> <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_interval.html#a13">readFrom</a>(std::istream&amp; _is)
00287 {
00288 <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Should not use eoRealInterval::readFrom"</span>);
00289 }
00290
<a name="l00295"></a><a class="code" href="classeo_real_interval.html#a14">00295</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_interval.html#a14">printOn</a>(std::ostream&amp; _os)<span class="keyword"> const</span>
00296 <span class="keyword"> </span>{
00297 _os &lt;&lt; <span class="stringliteral">"["</span> &lt;&lt; repMinimum &lt;&lt; <span class="stringliteral">","</span> &lt;&lt; repMaximum &lt;&lt; <span class="stringliteral">"]"</span>;
00298 }
00299
<a name="l00301"></a><a class="code" href="classeo_real_interval.html#a15">00301</a> <span class="keyword">virtual</span> <a class="code" href="classeo_real_bounds.html">eoRealBounds</a> * <a class="code" href="classeo_real_interval.html#a15">dup</a>()<span class="keyword"> const </span>
00302 <span class="keyword"> </span>{
00303 <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classeo_real_interval.html#a1">eoRealInterval</a>(*<span class="keyword">this</span>);
00304 }
00305
00306 <span class="keyword">private</span> :
00307 <span class="keywordtype">double</span> repMinimum;
00308 <span class="keywordtype">double</span> repMaximum;
00309 <span class="keywordtype">double</span> repRange; <span class="comment">// to minimize operations ???</span>
00310 };
00311
<a name="l00315"></a><a class="code" href="classeo_real_below_bound.html">00315</a> <span class="keyword">class </span><a class="code" href="classeo_real_below_bound.html">eoRealBelowBound</a> : <span class="keyword">public</span> <a class="code" href="classeo_real_bounds.html">eoRealBounds</a>
00316 {
00317 <span class="keyword">public</span> :
00318 <span class="keyword">virtual</span> ~<a class="code" href="classeo_real_below_bound.html">eoRealBelowBound</a>(){}
<a name="l00322"></a><a class="code" href="classeo_real_below_bound.html#a1">00322</a> <a class="code" href="classeo_real_below_bound.html#a1">eoRealBelowBound</a>(<span class="keywordtype">double</span> _min=0) :
00323 repMinimum(_min)
00324 {}
00325
00326 <span class="comment">// accessors </span>
<a name="l00327"></a><a class="code" href="classeo_real_below_bound.html#a2">00327</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_below_bound.html#a2">minimum</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> repMinimum; }
00328
<a name="l00329"></a><a class="code" href="classeo_real_below_bound.html#a3">00329</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_below_bound.html#a3">maximum</a>()<span class="keyword"> const </span>
00330 <span class="keyword"> </span>{
00331 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to get maximum of eoRealBelowBound"</span>);
00332 }
<a name="l00333"></a><a class="code" href="classeo_real_below_bound.html#a4">00333</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_below_bound.html#a4">range</a>()<span class="keyword"> const </span>
00334 <span class="keyword"> </span>{
00335 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to get range of eoRealBelowBound"</span>);
00336 }
00337
00338 <span class="comment">// random generators</span>
<a name="l00339"></a><a class="code" href="classeo_real_below_bound.html#a5">00339</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_below_bound.html#a5">uniform</a>(<a class="code" href="classeo_rng.html">eoRng</a> &amp; _rng = eo::rng)<span class="keyword"> const </span>
00340 <span class="keyword"> </span>{
00341 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to generate uniform values in eoRealBelowBound"</span>);
00342 }
00343
00344 <span class="comment">// description</span>
<a name="l00345"></a><a class="code" href="classeo_real_below_bound.html#a6">00345</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_below_bound.html#a6">isBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}
<a name="l00346"></a><a class="code" href="classeo_real_below_bound.html#a7">00346</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_below_bound.html#a7">hasNoBoundAtAll</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}
<a name="l00347"></a><a class="code" href="classeo_real_below_bound.html#a8">00347</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_below_bound.html#a8">isMinBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}
<a name="l00348"></a><a class="code" href="classeo_real_below_bound.html#a9">00348</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_below_bound.html#a9">isMaxBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}
00349
00350 <span class="comment">// says if a given double is within the bounds</span>
<a name="l00351"></a><a class="code" href="classeo_real_below_bound.html#a10">00351</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_below_bound.html#a10">isInBounds</a>(<span class="keywordtype">double</span> _r)<span class="keyword"> const </span>
00352 <span class="keyword"> </span>{
00353 <span class="keywordflow">if</span> (_r &lt; repMinimum)
00354 <span class="keywordflow">return</span> <span class="keyword">false</span>;
00355 <span class="keywordflow">return</span> <span class="keyword">true</span>;
00356 }
00357
00358 <span class="comment">// folds a value into bounds</span>
<a name="l00359"></a><a class="code" href="classeo_real_below_bound.html#a11">00359</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_below_bound.html#a11">foldsInBounds</a>(<span class="keywordtype">double</span> &amp; _r)<span class="keyword"> const </span>
00360 <span class="keyword"> </span>{
00361 <span class="comment">// easy as a pie: symmetry w.r.t. minimum</span>
00362 <span class="keywordflow">if</span> (_r &lt; repMinimum) <span class="comment">// nothing to do otherwise</span>
00363 _r = 2*repMinimum - _r;
00364 return ;
00365 }
00366
00367 <span class="comment">// truncates to the bounds</span>
<a name="l00368"></a><a class="code" href="classeo_real_below_bound.html#a12">00368</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_below_bound.html#a12">truncate</a>(<span class="keywordtype">double</span> &amp; _r)<span class="keyword"> const </span>
00369 <span class="keyword"> </span>{
00370 <span class="keywordflow">if</span> (_r &lt; repMinimum)
00371 _r = repMinimum;
00372 <span class="keywordflow">return</span>;
00373 }
00374
00375 <span class="comment">// methods from eoPersistent</span>
<a name="l00382"></a><a class="code" href="classeo_real_below_bound.html#a13">00382</a> <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_below_bound.html#a13">readFrom</a>(std::istream&amp; _is)
00383 {
00384 <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Should not use eoRealBelowBound::readFrom"</span>);
00385 }
00386
<a name="l00391"></a><a class="code" href="classeo_real_below_bound.html#a14">00391</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_below_bound.html#a14">printOn</a>(std::ostream&amp; _os)<span class="keyword"> const</span>
00392 <span class="keyword"> </span>{
00393 _os &lt;&lt; <span class="stringliteral">"["</span> &lt;&lt; repMinimum &lt;&lt; <span class="stringliteral">",+inf]"</span>;
00394 }
00395
<a name="l00397"></a><a class="code" href="classeo_real_below_bound.html#a15">00397</a> <span class="keyword">virtual</span> <a class="code" href="classeo_real_bounds.html">eoRealBounds</a> * <a class="code" href="classeo_real_below_bound.html#a15">dup</a>()<span class="keyword"> const </span>
00398 <span class="keyword"> </span>{
00399 <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classeo_real_below_bound.html#a1">eoRealBelowBound</a>(*<span class="keyword">this</span>);
00400 }
00401
00402 <span class="keyword">private</span> :
00403 <span class="keywordtype">double</span> repMinimum;
00404 };
00405
<a name="l00409"></a><a class="code" href="classeo_real_above_bound.html">00409</a> <span class="keyword">class </span><a class="code" href="classeo_real_above_bound.html">eoRealAboveBound</a> : <span class="keyword">public</span> <a class="code" href="classeo_real_bounds.html">eoRealBounds</a>
00410 {
00411 <span class="keyword">public</span> :
00412 <span class="keyword">virtual</span> ~<a class="code" href="classeo_real_above_bound.html">eoRealAboveBound</a>(){}
00413
<a name="l00417"></a><a class="code" href="classeo_real_above_bound.html#a1">00417</a> <a class="code" href="classeo_real_above_bound.html#a1">eoRealAboveBound</a>(<span class="keywordtype">double</span> _max=0) :
00418 repMaximum(_max)
00419 {}
00420
00421 <span class="comment">// accessors </span>
<a name="l00422"></a><a class="code" href="classeo_real_above_bound.html#a2">00422</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_above_bound.html#a2">maximum</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> repMaximum; }
00423
<a name="l00424"></a><a class="code" href="classeo_real_above_bound.html#a3">00424</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_above_bound.html#a3">minimum</a>()<span class="keyword"> const </span>
00425 <span class="keyword"> </span>{
00426 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to get minimum of eoRealAboveBound"</span>);
00427 }
<a name="l00428"></a><a class="code" href="classeo_real_above_bound.html#a4">00428</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_above_bound.html#a4">range</a>()<span class="keyword"> const </span>
00429 <span class="keyword"> </span>{
00430 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to get range of eoRealAboveBound"</span>);
00431 }
00432
00433 <span class="comment">// random generators</span>
<a name="l00434"></a><a class="code" href="classeo_real_above_bound.html#a5">00434</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_real_above_bound.html#a5">uniform</a>(<a class="code" href="classeo_rng.html">eoRng</a> &amp; _rng = eo::rng)<span class="keyword"> const </span>
00435 <span class="keyword"> </span>{
00436 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to generate uniform values in eoRealAboveBound"</span>);
00437 }
00438
00439 <span class="comment">// description</span>
<a name="l00440"></a><a class="code" href="classeo_real_above_bound.html#a6">00440</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_above_bound.html#a6">isBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}
<a name="l00441"></a><a class="code" href="classeo_real_above_bound.html#a7">00441</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_above_bound.html#a7">hasNoBoundAtAll</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}
<a name="l00442"></a><a class="code" href="classeo_real_above_bound.html#a8">00442</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_above_bound.html#a8">isMinBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}
<a name="l00443"></a><a class="code" href="classeo_real_above_bound.html#a9">00443</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_above_bound.html#a9">isMaxBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}
00444
00445 <span class="comment">// says if a given double is within the bounds</span>
<a name="l00446"></a><a class="code" href="classeo_real_above_bound.html#a10">00446</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_real_above_bound.html#a10">isInBounds</a>(<span class="keywordtype">double</span> _r)<span class="keyword"> const </span>
00447 <span class="keyword"> </span>{
00448 <span class="keywordflow">if</span> (_r &gt; repMaximum)
00449 <span class="keywordflow">return</span> <span class="keyword">false</span>;
00450 <span class="keywordflow">return</span> <span class="keyword">true</span>;
00451 }
00452
00453 <span class="comment">// folds a value into bounds</span>
<a name="l00454"></a><a class="code" href="classeo_real_above_bound.html#a11">00454</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_above_bound.html#a11">foldsInBounds</a>(<span class="keywordtype">double</span> &amp; _r)<span class="keyword"> const </span>
00455 <span class="keyword"> </span>{
00456 <span class="comment">// easy as a pie: symmetry w.r.t. maximum</span>
00457 <span class="keywordflow">if</span> (_r &gt; repMaximum) <span class="comment">// nothing to do otherwise</span>
00458 _r = 2*repMaximum - _r;
00459 return ;
00460 }
00461
00462 <span class="comment">// truncates to the bounds</span>
<a name="l00463"></a><a class="code" href="classeo_real_above_bound.html#a12">00463</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_above_bound.html#a12">truncate</a>(<span class="keywordtype">double</span> &amp; _r)<span class="keyword"> const </span>
00464 <span class="keyword"> </span>{
00465 <span class="keywordflow">if</span> (_r &gt; repMaximum)
00466 _r = repMaximum;
00467 <span class="keywordflow">return</span>;
00468 }
00469
00470 <span class="comment">// methods from eoPersistent</span>
<a name="l00477"></a><a class="code" href="classeo_real_above_bound.html#a13">00477</a> <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_above_bound.html#a13">readFrom</a>(std::istream&amp; _is)
00478 {
00479 <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Should not use eoRealAboveBound::readFrom"</span>);
00480 }
00481
<a name="l00486"></a><a class="code" href="classeo_real_above_bound.html#a14">00486</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_real_above_bound.html#a14">printOn</a>(std::ostream&amp; _os)<span class="keyword"> const</span>
00487 <span class="keyword"> </span>{
00488 _os &lt;&lt; <span class="stringliteral">"[-inf,"</span> &lt;&lt; repMaximum &lt;&lt; <span class="stringliteral">"]"</span>;
00489 }
00490
<a name="l00492"></a><a class="code" href="classeo_real_above_bound.html#a15">00492</a> <span class="keyword">virtual</span> <a class="code" href="classeo_real_bounds.html">eoRealBounds</a> * <a class="code" href="classeo_real_above_bound.html#a15">dup</a>()<span class="keyword"> const </span>
00493 <span class="keyword"> </span>{
00494 <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classeo_real_above_bound.html#a1">eoRealAboveBound</a>(*<span class="keyword">this</span>);
00495 }
00496
00497 <span class="keyword">private</span> :
00498 <span class="keywordtype">double</span> repMaximum;
00499 };
00500
00502
<a name="l00506"></a><a class="code" href="classeo_general_real_bounds.html">00506</a> <span class="keyword">class </span><a class="code" href="classeo_general_real_bounds.html">eoGeneralRealBounds</a> : <span class="keyword">public</span> <a class="code" href="classeo_real_bounds.html">eoRealBounds</a>
00507 {
00508 <span class="keyword">public</span>:
<a name="l00510"></a><a class="code" href="classeo_general_real_bounds.html#a0">00510</a> <a class="code" href="classeo_general_real_bounds.html#a0">eoGeneralRealBounds</a>(std::string _s = <span class="stringliteral">"[-infinity,+infinity]"</span>)
00511 {
00512 repBound = <a class="code" href="classeo_general_real_bounds.html#d0">getBoundsFromString</a>(_s);
00513 }
00514
<a name="l00516"></a><a class="code" href="classeo_general_real_bounds.html#a1">00516</a> <a class="code" href="classeo_general_real_bounds.html#a0">eoGeneralRealBounds</a>(<span class="keyword">const</span> <a class="code" href="classeo_general_real_bounds.html">eoGeneralRealBounds</a> &amp; _b):<a class="code" href="classeo_real_bounds.html">eoRealBounds</a>(_b)
00517 {
00518 <span class="comment">// replicate the embedded bound (I'm pretty sure there is another</span>
00519 <span class="comment">// way to do that !!!</span>
00520
00521 <span class="keywordtype">bool</span> minBounded = _b.<a class="code" href="classeo_general_real_bounds.html#a6">isMinBounded</a>();
00522 <span class="keywordtype">bool</span> maxBounded = _b.<a class="code" href="classeo_general_real_bounds.html#a7">isMaxBounded</a>();
00523 <span class="keywordtype">double</span> minimum, maximum;
00524 <span class="keyword">const</span> <a class="code" href="classeo_real_bounds.html">eoRealBounds</a> &amp; bb = _b.<a class="code" href="classeo_general_real_bounds.html#a16">theBounds</a>();
00525 <span class="keywordflow">if</span> (minBounded) minimum = bb.<a class="code" href="classeo_real_bounds.html#a8">minimum</a>();
00526 <span class="keywordflow">if</span> (maxBounded) maximum = bb.<a class="code" href="classeo_real_bounds.html#a9">maximum</a>();
00527
00528 <span class="keywordflow">if</span> (minBounded &amp;&amp; maxBounded)
00529 repBound = <span class="keyword">new</span> <a class="code" href="classeo_real_interval.html">eoRealInterval</a>(minimum, maximum);
00530 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!minBounded &amp;&amp; !maxBounded) <span class="comment">// no bound at all</span>
00531 repBound = <span class="keyword">new</span> <a class="code" href="classeo_real_no_bounds.html">eoRealNoBounds</a>;
00532 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!minBounded &amp;&amp; maxBounded)
00533 repBound = <span class="keyword">new</span> <a class="code" href="classeo_real_above_bound.html">eoRealAboveBound</a>(maximum);
00534 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (minBounded &amp;&amp; !maxBounded)
00535 repBound = <span class="keyword">new</span> <a class="code" href="classeo_real_below_bound.html">eoRealBelowBound</a>(minimum);
00536 }
00537
00538 <a class="code" href="classeo_general_real_bounds.html">eoGeneralRealBounds</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classeo_general_real_bounds.html">eoGeneralRealBounds</a>&amp; _b)
00539 {
00540 <span class="comment">// replicate the embedded bound (I'm pretty sure there is another</span>
00541 <span class="comment">// way to do that !!!</span>
00542
00543 <span class="keywordtype">bool</span> minBounded = _b.<a class="code" href="classeo_general_real_bounds.html#a6">isMinBounded</a>();
00544 <span class="keywordtype">bool</span> maxBounded = _b.<a class="code" href="classeo_general_real_bounds.html#a7">isMaxBounded</a>();
00545 <span class="keywordtype">double</span> minimum, maximum;
00546 <span class="keyword">const</span> <a class="code" href="classeo_real_bounds.html">eoRealBounds</a> &amp; bb = _b.<a class="code" href="classeo_general_real_bounds.html#a16">theBounds</a>();
00547 <span class="keywordflow">if</span> (minBounded) minimum = bb.<a class="code" href="classeo_real_bounds.html#a8">minimum</a>();
00548 <span class="keywordflow">if</span> (maxBounded) maximum = bb.<a class="code" href="classeo_real_bounds.html#a9">maximum</a>();
00549
00550 <span class="comment">// first delete the embedded bounds if necessary</span>
00551 <span class="keywordflow">if</span> (repBound)
00552 <span class="keyword">delete</span> repBound;
00553 <span class="comment">// now reallocate</span>
00554 <span class="keywordflow">if</span> (minBounded &amp;&amp; maxBounded)
00555 repBound = <span class="keyword">new</span> <a class="code" href="classeo_real_interval.html">eoRealInterval</a>(minimum, maximum);
00556 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!minBounded &amp;&amp; !maxBounded) <span class="comment">// no bound at all</span>
00557 repBound = <span class="keyword">new</span> <a class="code" href="classeo_real_no_bounds.html">eoRealNoBounds</a>;
00558 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!minBounded &amp;&amp; maxBounded)
00559 repBound = <span class="keyword">new</span> <a class="code" href="classeo_real_above_bound.html">eoRealAboveBound</a>(maximum);
00560 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (minBounded &amp;&amp; !maxBounded)
00561 repBound = <span class="keyword">new</span> <a class="code" href="classeo_real_below_bound.html">eoRealBelowBound</a>(minimum);
00562 <span class="keywordflow">return</span> (*this);
00563 }
00564
00565
<a name="l00567"></a><a class="code" href="classeo_general_real_bounds.html#a3">00567</a> <a class="code" href="classeo_general_real_bounds.html#a3">~eoGeneralRealBounds</a>()
00568 {
00569 <span class="keyword">delete</span> repBound;
00570 }
00571
00573
<a name="l00575"></a><a class="code" href="classeo_general_real_bounds.html#a4">00575</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_general_real_bounds.html#a4">isBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> repBound-&gt;<a class="code" href="classeo_real_bounds.html#a1">isBounded</a>();}
00576
<a name="l00580"></a><a class="code" href="classeo_general_real_bounds.html#a5">00580</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_general_real_bounds.html#a5">hasNoBoundAtAll</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> repBound-&gt;<a class="code" href="classeo_real_bounds.html#a2">hasNoBoundAtAll</a>();}
00581
<a name="l00584"></a><a class="code" href="classeo_general_real_bounds.html#a6">00584</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_general_real_bounds.html#a6">isMinBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> repBound-&gt;<a class="code" href="classeo_real_bounds.html#a3">isMinBounded</a>();}
00585
<a name="l00588"></a><a class="code" href="classeo_general_real_bounds.html#a7">00588</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_general_real_bounds.html#a7">isMaxBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> repBound-&gt;<a class="code" href="classeo_real_bounds.html#a4">isMaxBounded</a>();}
00589
<a name="l00592"></a><a class="code" href="classeo_general_real_bounds.html#a8">00592</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_general_real_bounds.html#a8">isInBounds</a>(<span class="keywordtype">double</span> _x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> repBound-&gt;<a class="code" href="classeo_real_bounds.html#a5">isInBounds</a>(_x);}
00593
<a name="l00596"></a><a class="code" href="classeo_general_real_bounds.html#a9">00596</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_general_real_bounds.html#a9">foldsInBounds</a>(<span class="keywordtype">double</span> &amp; _x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> repBound-&gt;<a class="code" href="classeo_real_bounds.html#a6">foldsInBounds</a>(_x);}
00597
<a name="l00600"></a><a class="code" href="classeo_general_real_bounds.html#a10">00600</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_general_real_bounds.html#a10">truncate</a>(<span class="keywordtype">double</span> &amp; _x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> repBound-&gt;<a class="code" href="classeo_real_bounds.html#a7">truncate</a>(_x);}
00601
<a name="l00605"></a><a class="code" href="classeo_general_real_bounds.html#a11">00605</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_general_real_bounds.html#a11">minimum</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> repBound-&gt;<a class="code" href="classeo_real_bounds.html#a8">minimum</a>();}
<a name="l00609"></a><a class="code" href="classeo_general_real_bounds.html#a12">00609</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_general_real_bounds.html#a12">maximum</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> repBound-&gt;<a class="code" href="classeo_real_bounds.html#a9">maximum</a>();}
<a name="l00613"></a><a class="code" href="classeo_general_real_bounds.html#a13">00613</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_general_real_bounds.html#a13">range</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> repBound-&gt;<a class="code" href="classeo_real_bounds.html#a10">range</a>();}
00614
<a name="l00618"></a><a class="code" href="classeo_general_real_bounds.html#a14">00618</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_general_real_bounds.html#a14">uniform</a>(<a class="code" href="classeo_rng.html">eoRng</a> &amp; _rng = eo::rng)<span class="keyword"> const </span>{<span class="keywordflow">return</span> repBound-&gt;<a class="code" href="classeo_real_bounds.html#a11">uniform</a>();}
00619
<a name="l00621"></a><a class="code" href="classeo_general_real_bounds.html#a15">00621</a> <span class="keyword">virtual</span> <a class="code" href="classeo_real_bounds.html">eoRealBounds</a> * <a class="code" href="classeo_general_real_bounds.html#a15">dup</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> repBound-&gt;<a class="code" href="classeo_real_bounds.html#a12">dup</a>();}
00622
<a name="l00624"></a><a class="code" href="classeo_general_real_bounds.html#a16">00624</a> <span class="keyword">const</span> <a class="code" href="classeo_real_bounds.html">eoRealBounds</a> &amp; <a class="code" href="classeo_general_real_bounds.html#a16">theBounds</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *repBound;}
00625
<a name="l00629"></a><a class="code" href="classeo_general_real_bounds.html#a17">00629</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_general_real_bounds.html#a17">printOn</a>(std::ostream&amp; _os)<span class="keyword"> const</span>
00630 <span class="keyword"> </span>{
00631 repBound-&gt;<a class="code" href="classeo_printable.html#a1">printOn</a>(_os);
00632 }
00633
<a name="l00635"></a><a class="code" href="classeo_general_real_bounds.html#a18">00635</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_general_real_bounds.html#a18">readFrom</a>(std::istream&amp; _is)
00636 {
00637 std::string s;
00638 _is &gt;&gt; s;
00639 <span class="keywordflow">if</span> (repBound)
00640 <span class="keyword">delete</span> repBound;
00641 repBound = <a class="code" href="classeo_general_real_bounds.html#d0">getBoundsFromString</a>(s);
00642 }
00643
00644 <span class="keyword">private</span>:
00645 <span class="comment">// reading from a string</span>
00646 <a class="code" href="classeo_real_bounds.html">eoRealBounds</a> * <a class="code" href="classeo_general_real_bounds.html#d0">getBoundsFromString</a>(std::string);
00647
00648 <a class="code" href="classeo_real_bounds.html">eoRealBounds</a> * repBound;
00649 };
00650
00651
00652 <span class="preprocessor">#endif</span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Oct 19 05:06:37 2006 for EO by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.3.9.1 </small></address>
</body>
</html>