27 #ifndef MLN_VALUE_LUT_VEC_HH
28 # define MLN_VALUE_LUT_VEC_HH
38 # include <mln/core/concept/value_set.hh>
39 # include <mln/core/concept/function.hh>
40 # include <mln/trait/value_.hh>
49 template <
typename T>
class array;
53 template <
typename T>
class array;
60 template <
typename S>
struct fwd_viter_;
61 template <
typename S>
struct bkd_viter_;
70 template <
typename S,
typename T>
71 struct lut_vec :
public Value_Set< lut_vec<S,T> >
89 T operator()(
const mln_value(S)& val)
const;
100 template <
typename F>
104 template <
typename V>
108 template <
typename V>
120 template <
typename S,
typename T>
122 operator<<(std::ostream& ostr, const lut_vec<S,T>& lut);
125 # ifndef MLN_INCLUDE_ONLY
127 template <
typename S,
typename T>
136 template <
typename S,
typename T>
146 template <
typename S,
typename T>
147 template <
typename F>
152 const F& f_ = exact(f);
155 for (
unsigned i = 0; i < n_; ++i)
156 vec_.push_back(f_(vset[i]));
159 template <
typename S,
typename T>
160 template <
typename V>
165 const fun::i2v::array<V>& f_ = exact(f);
167 vec_ = f_.std_vector();
170 template <
typename S,
typename T>
171 template <
typename V>
182 template <
typename S,
typename T>
187 mln_precondition(vset_.index_of(val) < n_);
188 return vec_[vset_.index_of(val)];
191 template <
typename S,
typename T>
196 mln_precondition(i < nvalues());
200 template <
typename S,
typename T>
208 template <
typename S,
typename T>
211 operator<<(std::ostream& ostr, const lut_vec<S,T>& lut)
214 for (
unsigned i = 0; i < lut.nvalues(); ++i)
215 ostr << i <<
':' << lut[i] <<
' ';
220 # endif // ! MLN_INCLUDE_ONLY
228 # include <mln/value/viter.hh>
231 #endif // ! MLN_VALUE_LUT_VEC_HH