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