paradiseo/trunk/paradiseo-eo/doc/html/eo_int_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

525 lines
56 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: eoIntBounds.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>eoIntBounds.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">// eoIntBounds.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 _eoIntBounds_h</span>
00028 <span class="preprocessor"></span><span class="preprocessor">#define _eoIntBounds_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_int_bounds.html">00075</a> <span class="keyword">class </span><a class="code" href="classeo_int_bounds.html">eoIntBounds</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_int_bounds.html">eoIntBounds</a>(){}
00079
00082 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_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_int_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_int_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_int_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_int_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_int_bounds.html#a6">foldsInBounds</a>(<span class="keywordtype">double</span> &amp;) <span class="keyword">const </span>= 0;
00104
<a name="l00107"></a><a class="code" href="classeo_int_bounds.html#a7">00107</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_bounds.html#a6">foldsInBounds</a>(<span class="keywordtype">long</span> <span class="keywordtype">int</span> &amp; i)<span class="keyword"> const</span>
00108 <span class="keyword"> </span>{
00109 <span class="keywordtype">double</span> r = double(i);
00110 <a class="code" href="classeo_int_bounds.html#a6">foldsInBounds</a>(r);
00111 i = (<span class="keywordtype">long</span> int)(r);
00112 }
00113
00116 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_bounds.html#a8">truncate</a>(<span class="keywordtype">double</span> &amp;) <span class="keyword">const </span>= 0;
00117
<a name="l00120"></a><a class="code" href="classeo_int_bounds.html#a9">00120</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_bounds.html#a8">truncate</a>(<span class="keywordtype">long</span> <span class="keywordtype">int</span> &amp; i)<span class="keyword"> const </span>
00121 <span class="keyword"> </span>{
00122 <span class="keywordtype">double</span> r = double(i);
00123 <a class="code" href="classeo_int_bounds.html#a8">truncate</a>(r);
00124 i = (<span class="keywordtype">long</span> int)(r);
00125 }
00126
00130 <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_int_bounds.html#a10">minimum</a>() <span class="keyword">const </span>= 0 ;
00134 <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_int_bounds.html#a11">maximum</a>() <span class="keyword">const </span>= 0 ;
00138 <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_int_bounds.html#a12">range</a>() <span class="keyword">const </span>= 0;
00139
00144 <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_int_bounds.html#a13">uniform</a>(<a class="code" href="classeo_rng.html">eoRng</a> &amp; _rng = eo::rng) <span class="keyword">const </span>= 0;
00145 <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> random(<a class="code" href="classeo_rng.html">eoRng</a> &amp; _rng = eo::rng) <span class="keyword">const </span>= 0;
00146
00148 <span class="keyword">virtual</span> <a class="code" href="classeo_int_bounds.html">eoIntBounds</a> * <a class="code" href="classeo_int_bounds.html#a15">dup</a>() <span class="keyword">const </span>= 0;
00149 };
00150
<a name="l00153"></a><a class="code" href="classeo_int_no_bounds.html">00153</a> <span class="keyword">class </span><a class="code" href="classeo_int_no_bounds.html">eoIntNoBounds</a> : <span class="keyword">public</span> <a class="code" href="classeo_int_bounds.html">eoIntBounds</a>
00154 {
00155 <span class="keyword">public</span>:
00156 <span class="keyword">virtual</span> ~<a class="code" href="classeo_int_no_bounds.html">eoIntNoBounds</a>(){}
00157
<a name="l00158"></a><a class="code" href="classeo_int_no_bounds.html#a1">00158</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_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="l00159"></a><a class="code" href="classeo_int_no_bounds.html#a2">00159</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_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="l00160"></a><a class="code" href="classeo_int_no_bounds.html#a3">00160</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_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="l00161"></a><a class="code" href="classeo_int_no_bounds.html#a4">00161</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_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="l00162"></a><a class="code" href="classeo_int_no_bounds.html#a5">00162</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_no_bounds.html#a5">foldsInBounds</a>(<span class="keywordtype">double</span> &amp;)<span class="keyword"> const </span>{<span class="keywordflow">return</span>;}
<a name="l00163"></a><a class="code" href="classeo_int_no_bounds.html#a6">00163</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_no_bounds.html#a6">truncate</a>(<span class="keywordtype">double</span> &amp;)<span class="keyword"> const </span>{<span class="keywordflow">return</span>;}
<a name="l00164"></a><a class="code" href="classeo_int_no_bounds.html#a7">00164</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_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>;}
00165
<a name="l00166"></a><a class="code" href="classeo_int_no_bounds.html#a8">00166</a> <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_int_no_bounds.html#a8">minimum</a>()<span class="keyword"> const</span>
00167 <span class="keyword"> </span>{
00168 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to get minimum of unbounded eoIntBounds"</span>);
00169 }
<a name="l00170"></a><a class="code" href="classeo_int_no_bounds.html#a9">00170</a> <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_int_no_bounds.html#a9">maximum</a>()<span class="keyword"> const </span>
00171 <span class="keyword"> </span>{
00172 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to get maximum of unbounded eoIntBounds"</span>);
00173 }
<a name="l00174"></a><a class="code" href="classeo_int_no_bounds.html#a10">00174</a> <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_int_no_bounds.html#a10">range</a>()<span class="keyword"> const </span>
00175 <span class="keyword"> </span>{
00176 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to get range of unbounded eoIntBounds"</span>);
00177 }
00178
<a name="l00179"></a><a class="code" href="classeo_int_no_bounds.html#a11">00179</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_int_no_bounds.html#a11">uniform</a>(<a class="code" href="classeo_rng.html">eoRng</a> &amp; _rng = eo::rng)<span class="keyword"> const </span>
00180 <span class="keyword"> </span>{
00181 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to generate uniform values in unbounded eoIntBounds"</span>);
00182 }
00183 <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> random(<a class="code" href="classeo_rng.html">eoRng</a> &amp; _rng = eo::rng)<span class="keyword"> const </span>
00184 <span class="keyword"> </span>{
00185 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to generate uniform values in unbounded eoIntBounds"</span>);
00186 }
00187
00188 <span class="comment">// methods from eoPersistent</span>
<a name="l00195"></a><a class="code" href="classeo_int_no_bounds.html#a13">00195</a> <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_no_bounds.html#a13">readFrom</a>(std::istream&amp; _is)
00196 {
00197 <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Should not use eoIntBounds::readFrom"</span>);
00198 }
00199
<a name="l00204"></a><a class="code" href="classeo_int_no_bounds.html#a14">00204</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_no_bounds.html#a14">printOn</a>(std::ostream&amp; _os)<span class="keyword"> const</span>
00205 <span class="keyword"> </span>{
00206 _os &lt;&lt; <span class="stringliteral">"[-inf,+inf]"</span>;
00207 }
00208
<a name="l00210"></a><a class="code" href="classeo_int_no_bounds.html#a15">00210</a> <span class="keyword">virtual</span> <a class="code" href="classeo_int_bounds.html">eoIntBounds</a> * <a class="code" href="classeo_int_no_bounds.html#a15">dup</a>()<span class="keyword"> const </span>
00211 <span class="keyword"> </span>{
00212 <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classeo_int_no_bounds.html">eoIntNoBounds</a>(*<span class="keyword">this</span>);
00213 }
00214
00215 };
00216
00217 <span class="comment">// one object for all - see eoIntBounds.cpp</span>
00218 <span class="keyword">extern</span> <a class="code" href="classeo_int_no_bounds.html">eoIntNoBounds</a> eoDummyIntNoBounds;
00219
<a name="l00223"></a><a class="code" href="classeo_int_interval.html">00223</a> <span class="keyword">class </span><a class="code" href="classeo_int_interval.html">eoIntInterval</a> : <span class="keyword">public</span> <a class="code" href="classeo_int_bounds.html">eoIntBounds</a>
00224 {
00225 <span class="keyword">public</span> :
00226 <span class="keyword">virtual</span> ~<a class="code" href="classeo_int_interval.html">eoIntInterval</a>(){}
00227
<a name="l00231"></a><a class="code" href="classeo_int_interval.html#a1">00231</a> <a class="code" href="classeo_int_interval.html#a1">eoIntInterval</a>(<span class="keywordtype">long</span> <span class="keywordtype">int</span> _min=0, <span class="keywordtype">long</span> <span class="keywordtype">int</span> _max=1) :
00232 repMinimum(_min), repMaximum(_max), repRange(_max-_min)
00233 {
00234 <span class="keywordflow">if</span> (repRange&lt;=0)
00235 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Void range in eoIntBounds"</span>);
00236 }
00237
00238 <span class="comment">// accessors </span>
<a name="l00239"></a><a class="code" href="classeo_int_interval.html#a2">00239</a> <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_int_interval.html#a2">minimum</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> repMinimum; }
<a name="l00240"></a><a class="code" href="classeo_int_interval.html#a3">00240</a> <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_int_interval.html#a3">maximum</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> repMaximum; }
<a name="l00241"></a><a class="code" href="classeo_int_interval.html#a4">00241</a> <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_int_interval.html#a4">range</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> repRange; }
00242
00243 <span class="comment">// description</span>
<a name="l00244"></a><a class="code" href="classeo_int_interval.html#a5">00244</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_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="l00245"></a><a class="code" href="classeo_int_interval.html#a6">00245</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_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="l00246"></a><a class="code" href="classeo_int_interval.html#a7">00246</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_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="l00247"></a><a class="code" href="classeo_int_interval.html#a8">00247</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_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>;}
00248
<a name="l00249"></a><a class="code" href="classeo_int_interval.html#a9">00249</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_int_interval.html#a9">uniform</a>(<a class="code" href="classeo_rng.html">eoRng</a> &amp; _rng = eo::rng)<span class="keyword"> const </span>
00250 <span class="keyword"> </span>{
00251 <span class="keywordflow">return</span> repMinimum + _rng.<a class="code" href="classeo_int_bounds.html#a13">uniform</a>(repRange);
00252 }
00253
00254 <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> random(<a class="code" href="classeo_rng.html">eoRng</a> &amp; _rng = eo::rng)<span class="keyword"> const </span>
00255 <span class="keyword"> </span>{
00256 <span class="keywordflow">return</span> repMinimum + _rng.<a class="code" href="classeo_int_bounds.html#a14">random</a>(repRange);
00257 }
00258
00259 <span class="comment">// says if a given double is within the bounds</span>
<a name="l00260"></a><a class="code" href="classeo_int_interval.html#a11">00260</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_interval.html#a11">isInBounds</a>(<span class="keywordtype">double</span> _r)<span class="keyword"> const </span>
00261 <span class="keyword"> </span>{
00262 <span class="keywordflow">if</span> (_r &lt; repMinimum)
00263 <span class="keywordflow">return</span> <span class="keyword">false</span>;
00264 <span class="keywordflow">if</span> (_r &gt; repMaximum)
00265 <span class="keywordflow">return</span> <span class="keyword">false</span>;
00266 <span class="keywordflow">return</span> <span class="keyword">true</span>;
00267 }
00268
00269 <span class="comment">// folds a value into bounds</span>
<a name="l00270"></a><a class="code" href="classeo_int_interval.html#a12">00270</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_interval.html#a12">foldsInBounds</a>(<span class="keywordtype">double</span> &amp; _r)<span class="keyword"> const </span>
00271 <span class="keyword"> </span>{
00272 <span class="keywordtype">long</span> iloc;
00273 <span class="keywordtype">double</span> dlargloc = 2 * <a class="code" href="classeo_int_interval.html#a4">range</a>() ;
00274
00275 <span class="keywordflow">if</span> (fabs(_r) &gt; 1.0E9) <span class="comment">// iloc too large!</span>
00276 {
00277 _r = <a class="code" href="classeo_int_interval.html#a9">uniform</a>();
00278 <span class="keywordflow">return</span>;
00279 }
00280
00281 <span class="keywordflow">if</span> ( (_r &gt; <a class="code" href="classeo_int_interval.html#a3">maximum</a>()) )
00282 {
00283 iloc = (long) ( (_r-<a class="code" href="classeo_int_interval.html#a2">minimum</a>()) / dlargloc ) ;
00284 _r -= dlargloc * iloc ;
00285 <span class="keywordflow">if</span> ( _r &gt; <a class="code" href="classeo_int_interval.html#a3">maximum</a>() )
00286 _r = 2*<a class="code" href="classeo_int_interval.html#a3">maximum</a>() - _r ;
00287 }
00288
00289 <span class="keywordflow">if</span> (_r &lt; <a class="code" href="classeo_int_interval.html#a2">minimum</a>())
00290 {
00291 iloc = (long) ( (<a class="code" href="classeo_int_interval.html#a3">maximum</a>()-_r) / dlargloc ) ;
00292 _r += dlargloc * iloc ;
00293 <span class="keywordflow">if</span> (_r &lt; <a class="code" href="classeo_int_interval.html#a2">minimum</a>())
00294 _r = 2*<a class="code" href="classeo_int_interval.html#a2">minimum</a>() - _r ;
00295 }
00296 }
00297
00298 <span class="comment">// truncates to the bounds</span>
<a name="l00299"></a><a class="code" href="classeo_int_interval.html#a13">00299</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_interval.html#a13">truncate</a>(<span class="keywordtype">double</span> &amp; _r)<span class="keyword"> const </span>
00300 <span class="keyword"> </span>{
00301 <span class="keywordflow">if</span> (_r &lt; repMinimum)
00302 _r = repMinimum;
00303 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (_r &gt; repMaximum)
00304 _r = repMaximum;
00305 <span class="keywordflow">return</span>;
00306 }
00307
00308 <span class="comment">// methods from eoPersistent</span>
<a name="l00315"></a><a class="code" href="classeo_int_interval.html#a14">00315</a> <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_interval.html#a14">readFrom</a>(std::istream&amp; _is)
00316 {
00317 <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Should not use eoIntInterval::readFrom"</span>);
00318 }
00319
<a name="l00324"></a><a class="code" href="classeo_int_interval.html#a15">00324</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_interval.html#a15">printOn</a>(std::ostream&amp; _os)<span class="keyword"> const</span>
00325 <span class="keyword"> </span>{
00326 _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>;
00327 }
00328
<a name="l00330"></a><a class="code" href="classeo_int_interval.html#a16">00330</a> <span class="keyword">virtual</span> <a class="code" href="classeo_int_bounds.html">eoIntBounds</a> * <a class="code" href="classeo_int_interval.html#a16">dup</a>()<span class="keyword"> const </span>
00331 <span class="keyword"> </span>{
00332 <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classeo_int_interval.html#a1">eoIntInterval</a>(*<span class="keyword">this</span>);
00333 }
00334
00335 <span class="keyword">private</span> :
00336 <span class="keywordtype">long</span> <span class="keywordtype">int</span> repMinimum;
00337 <span class="keywordtype">long</span> <span class="keywordtype">int</span> repMaximum;
00338 <span class="keywordtype">long</span> <span class="keywordtype">int</span> repRange; <span class="comment">// to minimize operations ???</span>
00339 };
00340
<a name="l00344"></a><a class="code" href="classeo_int_below_bound.html">00344</a> <span class="keyword">class </span><a class="code" href="classeo_int_below_bound.html">eoIntBelowBound</a> : <span class="keyword">public</span> <a class="code" href="classeo_int_bounds.html">eoIntBounds</a>
00345 {
00346 <span class="keyword">public</span> :
00347 <span class="keyword">virtual</span> ~<a class="code" href="classeo_int_below_bound.html">eoIntBelowBound</a>(){}
<a name="l00351"></a><a class="code" href="classeo_int_below_bound.html#a1">00351</a> <a class="code" href="classeo_int_below_bound.html#a1">eoIntBelowBound</a>(<span class="keywordtype">long</span> <span class="keywordtype">int</span> _min=0) :
00352 repMinimum(_min)
00353 {}
00354
00355 <span class="comment">// accessors </span>
<a name="l00356"></a><a class="code" href="classeo_int_below_bound.html#a2">00356</a> <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_int_below_bound.html#a2">minimum</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> repMinimum; }
00357
<a name="l00358"></a><a class="code" href="classeo_int_below_bound.html#a3">00358</a> <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_int_below_bound.html#a3">maximum</a>()<span class="keyword"> const </span>
00359 <span class="keyword"> </span>{
00360 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to get maximum of eoIntBelowBound"</span>);
00361 }
<a name="l00362"></a><a class="code" href="classeo_int_below_bound.html#a4">00362</a> <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_int_below_bound.html#a4">range</a>()<span class="keyword"> const </span>
00363 <span class="keyword"> </span>{
00364 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to get range of eoIntBelowBound"</span>);
00365 }
00366
<a name="l00367"></a><a class="code" href="classeo_int_below_bound.html#a5">00367</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_int_below_bound.html#a5">uniform</a>(<a class="code" href="classeo_rng.html">eoRng</a> &amp; _rng = eo::rng)<span class="keyword"> const </span>
00368 <span class="keyword"> </span>{
00369 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to generate uniform values in eoIntBelowBound"</span>);
00370 }
00371 <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> random(<a class="code" href="classeo_rng.html">eoRng</a> &amp; _rng = eo::rng)<span class="keyword"> const </span>
00372 <span class="keyword"> </span>{
00373 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to generate uniform values in eoIntBelowBound"</span>);
00374 }
00375
00376 <span class="comment">// description</span>
<a name="l00377"></a><a class="code" href="classeo_int_below_bound.html#a7">00377</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_below_bound.html#a7">isBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}
<a name="l00378"></a><a class="code" href="classeo_int_below_bound.html#a8">00378</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_below_bound.html#a8">hasNoBoundAtAll</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}
<a name="l00379"></a><a class="code" href="classeo_int_below_bound.html#a9">00379</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_below_bound.html#a9">isMinBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}
<a name="l00380"></a><a class="code" href="classeo_int_below_bound.html#a10">00380</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_below_bound.html#a10">isMaxBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}
00381
00382 <span class="comment">// says if a given double is within the bounds</span>
<a name="l00383"></a><a class="code" href="classeo_int_below_bound.html#a11">00383</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_below_bound.html#a11">isInBounds</a>(<span class="keywordtype">double</span> _r)<span class="keyword"> const </span>
00384 <span class="keyword"> </span>{
00385 <span class="keywordflow">if</span> (_r &lt; repMinimum)
00386 <span class="keywordflow">return</span> <span class="keyword">false</span>;
00387 <span class="keywordflow">return</span> <span class="keyword">true</span>;
00388 }
00389
00390 <span class="comment">// folds a value into bounds</span>
<a name="l00391"></a><a class="code" href="classeo_int_below_bound.html#a12">00391</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_below_bound.html#a12">foldsInBounds</a>(<span class="keywordtype">double</span> &amp; _r)<span class="keyword"> const </span>
00392 <span class="keyword"> </span>{
00393 <span class="comment">// easy as a pie: symmetry w.r.t. minimum</span>
00394 <span class="keywordflow">if</span> (_r &lt; repMinimum) <span class="comment">// nothing to do otherwise</span>
00395 _r = 2*repMinimum - _r;
00396 return ;
00397 }
00398
00399 <span class="comment">// truncates to the bounds</span>
<a name="l00400"></a><a class="code" href="classeo_int_below_bound.html#a13">00400</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_below_bound.html#a13">truncate</a>(<span class="keywordtype">double</span> &amp; _r)<span class="keyword"> const </span>
00401 <span class="keyword"> </span>{
00402 <span class="keywordflow">if</span> (_r &lt; repMinimum)
00403 _r = repMinimum;
00404 <span class="keywordflow">return</span>;
00405 }
00406
00407 <span class="comment">// methods from eoPersistent</span>
<a name="l00414"></a><a class="code" href="classeo_int_below_bound.html#a14">00414</a> <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_below_bound.html#a14">readFrom</a>(std::istream&amp; _is)
00415 {
00416 <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Should not use eoIntBelowBound::readFrom"</span>);
00417 }
00418
<a name="l00423"></a><a class="code" href="classeo_int_below_bound.html#a15">00423</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_below_bound.html#a15">printOn</a>(std::ostream&amp; _os)<span class="keyword"> const</span>
00424 <span class="keyword"> </span>{
00425 _os &lt;&lt; <span class="stringliteral">"["</span> &lt;&lt; repMinimum &lt;&lt; <span class="stringliteral">",+inf]"</span>;
00426 }
00427
<a name="l00429"></a><a class="code" href="classeo_int_below_bound.html#a16">00429</a> <span class="keyword">virtual</span> <a class="code" href="classeo_int_bounds.html">eoIntBounds</a> * <a class="code" href="classeo_int_below_bound.html#a16">dup</a>()<span class="keyword"> const </span>
00430 <span class="keyword"> </span>{
00431 <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classeo_int_below_bound.html#a1">eoIntBelowBound</a>(*<span class="keyword">this</span>);
00432 }
00433
00434 <span class="keyword">private</span> :
00435 <span class="keywordtype">long</span> <span class="keywordtype">int</span> repMinimum;
00436 };
00437
<a name="l00441"></a><a class="code" href="classeo_int_above_bound.html">00441</a> <span class="keyword">class </span><a class="code" href="classeo_int_above_bound.html">eoIntAboveBound</a> : <span class="keyword">public</span> <a class="code" href="classeo_int_bounds.html">eoIntBounds</a>
00442 {
00443 <span class="keyword">public</span> :
00444 <span class="keyword">virtual</span> ~<a class="code" href="classeo_int_above_bound.html">eoIntAboveBound</a>(){}
00445
<a name="l00449"></a><a class="code" href="classeo_int_above_bound.html#a1">00449</a> <a class="code" href="classeo_int_above_bound.html#a1">eoIntAboveBound</a>(<span class="keywordtype">long</span> <span class="keywordtype">int</span> _max=0) :
00450 repMaximum(_max)
00451 {}
00452
00453 <span class="comment">// accessors </span>
<a name="l00454"></a><a class="code" href="classeo_int_above_bound.html#a2">00454</a> <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_int_above_bound.html#a2">maximum</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> repMaximum; }
00455
<a name="l00456"></a><a class="code" href="classeo_int_above_bound.html#a3">00456</a> <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_int_above_bound.html#a3">minimum</a>()<span class="keyword"> const </span>
00457 <span class="keyword"> </span>{
00458 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to get minimum of eoIntAboveBound"</span>);
00459 }
<a name="l00460"></a><a class="code" href="classeo_int_above_bound.html#a4">00460</a> <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_int_above_bound.html#a4">range</a>()<span class="keyword"> const </span>
00461 <span class="keyword"> </span>{
00462 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to get range of eoIntAboveBound"</span>);
00463 }
00464
<a name="l00465"></a><a class="code" href="classeo_int_above_bound.html#a5">00465</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_int_above_bound.html#a5">uniform</a>(<a class="code" href="classeo_rng.html">eoRng</a> &amp; _rng = eo::rng)<span class="keyword"> const </span>
00466 <span class="keyword"> </span>{
00467 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to generate uniform values in eoIntAboveBound"</span>);
00468 }
00469 <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> random(<a class="code" href="classeo_rng.html">eoRng</a> &amp; _rng = eo::rng)<span class="keyword"> const </span>
00470 <span class="keyword"> </span>{
00471 <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">"Trying to generate uniform values in eoIntAboveBound"</span>);
00472 }
00473
00474 <span class="comment">// description</span>
<a name="l00475"></a><a class="code" href="classeo_int_above_bound.html#a7">00475</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_above_bound.html#a7">isBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}
<a name="l00476"></a><a class="code" href="classeo_int_above_bound.html#a8">00476</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_above_bound.html#a8">hasNoBoundAtAll</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}
<a name="l00477"></a><a class="code" href="classeo_int_above_bound.html#a9">00477</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_above_bound.html#a9">isMinBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}
<a name="l00478"></a><a class="code" href="classeo_int_above_bound.html#a10">00478</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_above_bound.html#a10">isMaxBounded</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}
00479
00480 <span class="comment">// says if a given double is within the bounds</span>
<a name="l00481"></a><a class="code" href="classeo_int_above_bound.html#a11">00481</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_int_above_bound.html#a11">isInBounds</a>(<span class="keywordtype">double</span> _r)<span class="keyword"> const </span>
00482 <span class="keyword"> </span>{
00483 <span class="keywordflow">if</span> (_r &gt; repMaximum)
00484 <span class="keywordflow">return</span> <span class="keyword">false</span>;
00485 <span class="keywordflow">return</span> <span class="keyword">true</span>;
00486 }
00487
00488 <span class="comment">// folds a value into bounds</span>
<a name="l00489"></a><a class="code" href="classeo_int_above_bound.html#a12">00489</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_above_bound.html#a12">foldsInBounds</a>(<span class="keywordtype">double</span> &amp; _r)<span class="keyword"> const </span>
00490 <span class="keyword"> </span>{
00491 <span class="comment">// easy as a pie: symmetry w.r.t. maximum</span>
00492 <span class="keywordflow">if</span> (_r &gt; repMaximum) <span class="comment">// nothing to do otherwise</span>
00493 _r = 2*repMaximum - _r;
00494 return ;
00495 }
00496
00497 <span class="comment">// truncates to the bounds</span>
<a name="l00498"></a><a class="code" href="classeo_int_above_bound.html#a13">00498</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_above_bound.html#a13">truncate</a>(<span class="keywordtype">double</span> &amp; _r)<span class="keyword"> const </span>
00499 <span class="keyword"> </span>{
00500 <span class="keywordflow">if</span> (_r &gt; repMaximum)
00501 _r = repMaximum;
00502 <span class="keywordflow">return</span>;
00503 }
00504
00505 <span class="comment">// methods from eoPersistent</span>
<a name="l00512"></a><a class="code" href="classeo_int_above_bound.html#a14">00512</a> <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_above_bound.html#a14">readFrom</a>(std::istream&amp; _is)
00513 {
00514 <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Should not use eoIntAboveBound::readFrom"</span>);
00515 }
00516
<a name="l00521"></a><a class="code" href="classeo_int_above_bound.html#a15">00521</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_int_above_bound.html#a15">printOn</a>(std::ostream&amp; _os)<span class="keyword"> const</span>
00522 <span class="keyword"> </span>{
00523 _os &lt;&lt; <span class="stringliteral">"[-inf,"</span> &lt;&lt; repMaximum &lt;&lt; <span class="stringliteral">"]"</span>;
00524 }
00525
<a name="l00527"></a><a class="code" href="classeo_int_above_bound.html#a16">00527</a> <span class="keyword">virtual</span> <a class="code" href="classeo_int_bounds.html">eoIntBounds</a> * <a class="code" href="classeo_int_above_bound.html#a16">dup</a>()<span class="keyword"> const </span>
00528 <span class="keyword"> </span>{
00529 <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classeo_int_above_bound.html#a1">eoIntAboveBound</a>(*<span class="keyword">this</span>);
00530 }
00531
00532 <span class="keyword">private</span> :
00533 <span class="keywordtype">long</span> <span class="keywordtype">int</span> repMaximum;
00534 };
00535
00537
<a name="l00541"></a><a class="code" href="classeo_general_int_bounds.html">00541</a> <span class="keyword">class </span><a class="code" href="classeo_general_int_bounds.html">eoGeneralIntBounds</a> : <span class="keyword">public</span> <a class="code" href="classeo_int_bounds.html">eoIntBounds</a>
00542 {
00543 <span class="keyword">public</span>:
<a name="l00545"></a><a class="code" href="classeo_general_int_bounds.html#a0">00545</a> <a class="code" href="classeo_general_int_bounds.html#a0">eoGeneralIntBounds</a>(std::string _s = <span class="stringliteral">"[-infinity,+infinity]"</span>)
00546 {
00547 repBound = <a class="code" href="classeo_general_int_bounds.html#d0">getBoundsFromString</a>(_s);
00548 }
00549
<a name="l00551"></a><a class="code" href="classeo_general_int_bounds.html#a1">00551</a> <a class="code" href="classeo_general_int_bounds.html#a0">eoGeneralIntBounds</a>(<span class="keyword">const</span> <a class="code" href="classeo_general_int_bounds.html">eoGeneralIntBounds</a> &amp; _b) : <a class="code" href="classeo_int_bounds.html">eoIntBounds</a>(_b)
00552 {
00553 <span class="comment">// replicate the embedded bound (I'm pretty sure there is another</span>
00554 <span class="comment">// way to do that !!!</span>
00555
00556 <span class="keywordtype">bool</span> minBounded = _b.<a class="code" href="classeo_general_int_bounds.html#a6">isMinBounded</a>();
00557 <span class="keywordtype">bool</span> maxBounded = _b.<a class="code" href="classeo_general_int_bounds.html#a7">isMaxBounded</a>();
00558 <span class="keywordtype">long</span> <span class="keywordtype">int</span> minimum, maximum;
00559 <span class="keyword">const</span> <a class="code" href="classeo_int_bounds.html">eoIntBounds</a> &amp; bb = _b.<a class="code" href="classeo_general_int_bounds.html#a17">theBounds</a>();
00560 <span class="keywordflow">if</span> (minBounded) minimum = bb.<a class="code" href="classeo_int_bounds.html#a10">minimum</a>();
00561 <span class="keywordflow">if</span> (maxBounded) maximum = bb.<a class="code" href="classeo_int_bounds.html#a11">maximum</a>();
00562
00563 <span class="keywordflow">if</span> (minBounded &amp;&amp; maxBounded)
00564 repBound = <span class="keyword">new</span> <a class="code" href="classeo_int_interval.html">eoIntInterval</a>(minimum, maximum);
00565 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!minBounded &amp;&amp; !maxBounded) <span class="comment">// no bound at all</span>
00566 repBound = <span class="keyword">new</span> <a class="code" href="classeo_int_no_bounds.html">eoIntNoBounds</a>;
00567 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!minBounded &amp;&amp; maxBounded)
00568 repBound = <span class="keyword">new</span> <a class="code" href="classeo_int_above_bound.html">eoIntAboveBound</a>(maximum);
00569 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (minBounded &amp;&amp; !maxBounded)
00570 repBound = <span class="keyword">new</span> <a class="code" href="classeo_int_below_bound.html">eoIntBelowBound</a>(minimum);
00571 }
00572
00573 <a class="code" href="classeo_general_int_bounds.html">eoGeneralIntBounds</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classeo_general_int_bounds.html">eoGeneralIntBounds</a>&amp; _b)
00574 {
00575 <span class="comment">// replicate the embedded bound (I'm pretty sure there is another</span>
00576 <span class="comment">// way to do that !!!</span>
00577
00578 <span class="keywordtype">bool</span> minBounded = _b.<a class="code" href="classeo_general_int_bounds.html#a6">isMinBounded</a>();
00579 <span class="keywordtype">bool</span> maxBounded = _b.<a class="code" href="classeo_general_int_bounds.html#a7">isMaxBounded</a>();
00580 <span class="keywordtype">long</span> <span class="keywordtype">int</span> minimum, maximum;
00581 <span class="keyword">const</span> <a class="code" href="classeo_int_bounds.html">eoIntBounds</a> &amp; bb = _b.<a class="code" href="classeo_general_int_bounds.html#a17">theBounds</a>();
00582 <span class="keywordflow">if</span> (minBounded) minimum = bb.<a class="code" href="classeo_int_bounds.html#a10">minimum</a>();
00583 <span class="keywordflow">if</span> (maxBounded) maximum = bb.<a class="code" href="classeo_int_bounds.html#a11">maximum</a>();
00584
00585 <span class="comment">// first delete the embedded bounds if necessary</span>
00586 <span class="keywordflow">if</span> (repBound)
00587 <span class="keyword">delete</span> repBound;
00588 <span class="comment">// now reallocate</span>
00589 <span class="keywordflow">if</span> (minBounded &amp;&amp; maxBounded)
00590 repBound = <span class="keyword">new</span> <a class="code" href="classeo_int_interval.html">eoIntInterval</a>(minimum, maximum);
00591 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!minBounded &amp;&amp; !maxBounded) <span class="comment">// no bound at all</span>
00592 repBound = <span class="keyword">new</span> <a class="code" href="classeo_int_no_bounds.html">eoIntNoBounds</a>;
00593 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!minBounded &amp;&amp; maxBounded)
00594 repBound = <span class="keyword">new</span> <a class="code" href="classeo_int_above_bound.html">eoIntAboveBound</a>(maximum);
00595 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (minBounded &amp;&amp; !maxBounded)
00596 repBound = <span class="keyword">new</span> <a class="code" href="classeo_int_below_bound.html">eoIntBelowBound</a>(minimum);
00597 <span class="keywordflow">return</span> (*this);
00598 }
00599
00600
<a name="l00602"></a><a class="code" href="classeo_general_int_bounds.html#a3">00602</a> <a class="code" href="classeo_general_int_bounds.html#a3">~eoGeneralIntBounds</a>()
00603 {
00604 <span class="keyword">delete</span> repBound;
00605 }
00606
00608
<a name="l00610"></a><a class="code" href="classeo_general_int_bounds.html#a4">00610</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_general_int_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_int_bounds.html#a1">isBounded</a>();}
00611
<a name="l00615"></a><a class="code" href="classeo_general_int_bounds.html#a5">00615</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_general_int_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_int_bounds.html#a2">hasNoBoundAtAll</a>();}
00616
<a name="l00619"></a><a class="code" href="classeo_general_int_bounds.html#a6">00619</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_general_int_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_int_bounds.html#a3">isMinBounded</a>();}
00620
<a name="l00623"></a><a class="code" href="classeo_general_int_bounds.html#a7">00623</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_general_int_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_int_bounds.html#a4">isMaxBounded</a>();}
00624
<a name="l00627"></a><a class="code" href="classeo_general_int_bounds.html#a8">00627</a> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classeo_general_int_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_int_bounds.html#a5">isInBounds</a>(_x);}
00628
<a name="l00631"></a><a class="code" href="classeo_general_int_bounds.html#a9">00631</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_general_int_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_int_bounds.html#a6">foldsInBounds</a>(_x);}
00632
<a name="l00635"></a><a class="code" href="classeo_general_int_bounds.html#a10">00635</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_general_int_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_int_bounds.html#a8">truncate</a>(_x);}
00636
<a name="l00640"></a><a class="code" href="classeo_general_int_bounds.html#a11">00640</a> <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_general_int_bounds.html#a11">minimum</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> repBound-&gt;<a class="code" href="classeo_int_bounds.html#a10">minimum</a>();}
<a name="l00644"></a><a class="code" href="classeo_general_int_bounds.html#a12">00644</a> <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_general_int_bounds.html#a12">maximum</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> repBound-&gt;<a class="code" href="classeo_int_bounds.html#a11">maximum</a>();}
<a name="l00648"></a><a class="code" href="classeo_general_int_bounds.html#a13">00648</a> <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_general_int_bounds.html#a13">range</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> repBound-&gt;<a class="code" href="classeo_int_bounds.html#a12">range</a>();}
00649
<a name="l00653"></a><a class="code" href="classeo_general_int_bounds.html#a14">00653</a> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classeo_general_int_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_int_bounds.html#a13">uniform</a>();}
00654
<a name="l00658"></a><a class="code" href="classeo_general_int_bounds.html#a15">00658</a> <span class="keyword">virtual</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> <a class="code" href="classeo_general_int_bounds.html#a15">random</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_int_bounds.html#a14">random</a>();}
00659
<a name="l00661"></a><a class="code" href="classeo_general_int_bounds.html#a16">00661</a> <span class="keyword">virtual</span> <a class="code" href="classeo_int_bounds.html">eoIntBounds</a> * <a class="code" href="classeo_general_int_bounds.html#a16">dup</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> repBound-&gt;<a class="code" href="classeo_int_bounds.html#a15">dup</a>();}
00662
<a name="l00664"></a><a class="code" href="classeo_general_int_bounds.html#a17">00664</a> <span class="keyword">const</span> <a class="code" href="classeo_int_bounds.html">eoIntBounds</a> &amp; <a class="code" href="classeo_general_int_bounds.html#a17">theBounds</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *repBound;}
00665
<a name="l00669"></a><a class="code" href="classeo_general_int_bounds.html#a18">00669</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_general_int_bounds.html#a18">printOn</a>(std::ostream&amp; _os)<span class="keyword"> const</span>
00670 <span class="keyword"> </span>{
00671 repBound-&gt;<a class="code" href="classeo_printable.html#a1">printOn</a>(_os);
00672 }
00673
<a name="l00675"></a><a class="code" href="classeo_general_int_bounds.html#a19">00675</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classeo_general_int_bounds.html#a19">readFrom</a>(std::istream&amp; _is)
00676 {
00677 std::string s;
00678 _is &gt;&gt; s;
00679 <span class="keywordflow">if</span> (repBound)
00680 <span class="keyword">delete</span> repBound;
00681 repBound = <a class="code" href="classeo_general_int_bounds.html#d0">getBoundsFromString</a>(s);
00682 }
00683
00684 <span class="keyword">private</span>:
00685 <span class="comment">// reading from a string</span>
00686 <a class="code" href="classeo_int_bounds.html">eoIntBounds</a> * <a class="code" href="classeo_general_int_bounds.html#d0">getBoundsFromString</a>(std::string);
00687
00688 <a class="code" href="classeo_int_bounds.html">eoIntBounds</a> * repBound;
00689 };
00690
00691
00692 <span class="preprocessor">#endif</span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Oct 19 05:06:36 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>