00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 #ifndef MLN_VALUE_FLOAT01_F_HH
00027 # define MLN_VALUE_FLOAT01_F_HH
00028 
00034 # include <iostream>
00035 # include <mln/value/internal/value_like.hh>
00036 # include <mln/value/concept/floating.hh>
00037 # include <mln/value/builtin/floatings.hh>
00038 # include <mln/trait/value_.hh>
00039 
00040 
00041 namespace mln
00042 {
00043 
00044   
00045   namespace value {
00046     struct float01;
00047     struct float01_f;
00048   }
00049 
00050 
00051   namespace trait
00052   {
00053 
00054     template <>
00055     struct value_< mln::value::float01_f >
00056     {
00057       typedef trait::value::nature::floating nature;
00058       typedef trait::value::kind::data       kind;
00059       typedef trait::value::quant::high      quant;
00060 
00061       enum {
00062         dim = 1,
00063         nbits = 8 * sizeof(float),
00064         card  = 0
00065       };
00066 
00067       static float min() { return 0; }
00068       static float max() { return 1; }
00069       static float epsilon() { return mln_epsilon(float); }
00070 
00071       typedef float comp;
00072 
00073       typedef float sum;
00074     };
00075 
00076   } 
00077 
00078 
00079 
00080   namespace value
00081   {
00082 
00084     struct float01_f
00085       :
00086       public Floating< float01_f >,
00087 
00088       public internal::value_like_< float,      
00089                                     float,      
00090                                     float,      
00091                                     float01_f > 
00092     {
00094       float01_f();
00095 
00097       float01_f(float val);
00098 
00100       float01_f& operator=(const float val);
00101 
00103       float value() const;
00104 
00106       operator float() const;
00107     };
00108 
00109 
00110 # ifndef MLN_INCLUDE_ONLY
00111 
00112     
00113 
00114     inline
00115     float01_f::float01_f()
00116     {
00117     }
00118 
00119     inline
00120     float01_f::float01_f(float val)
00121     {
00122       mln_precondition(val >= 0);
00123       mln_precondition(val <= 1);
00124       this->v_ = val;
00125     }
00126 
00127     inline
00128     float
00129     float01_f::value() const
00130     {
00131       return this->v_;
00132     }
00133 
00134     inline
00135     float01_f&
00136     float01_f::operator=(float val)
00137     {
00138       mln_precondition(val >= 0);
00139       mln_precondition(val <= 1);
00140       this->v_ = val;
00141       return *this;
00142     }
00143 
00144     inline
00145     float01_f::operator float() const
00146     {
00147       return this->v_;
00148     }
00149 
00150 # endif // ! MLN_INCLUDE_ONLY
00151 
00152   } 
00153 
00154 } 
00155 
00156 
00157 #endif // ! MLN_VALUE_FLOAT01_F_HH