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>
101 template <
typename F>
105 template <
typename V>
109 template <
typename V>
122 template <
typename S,
typename T>
124 operator<<(std::ostream& ostr, const lut_vec<S,T>& lut);
127 # ifndef MLN_INCLUDE_ONLY
129 template <
typename S,
typename T>
138 template <
typename S,
typename T>
148 template <
typename S,
typename T>
149 template <
typename F>
154 const F& f_ =
exact(f);
157 for (
unsigned i = 0; i <
n_; ++i)
158 vec_.push_back(f_(vset[i]));
161 template <
typename S,
typename T>
162 template <
typename V>
167 const fun::i2v::array<V>& f_ =
exact(f);
169 vec_ = f_.std_vector();
172 template <
typename S,
typename T>
173 template <
typename V>
178 const util::array<V>& f_ =
exact(f);
180 vec_ = f_.std_vector();
184 template <
typename S,
typename T>
189 mln_precondition(vset_.index_of(val) < n_);
190 return vec_[vset_.index_of(val)];
193 template <
typename S,
typename T>
198 mln_precondition(i < nvalues());
202 template <
typename S,
typename T>
210 template <
typename S,
typename T>
213 operator<<(std::ostream& ostr, const lut_vec<S,T>& lut)
216 for (
unsigned i = 0; i < lut.nvalues(); ++i)
217 ostr << i <<
':' << lut[i] <<
' ';
222 # endif // ! MLN_INCLUDE_ONLY
230 # include <mln/value/viter.hh>
233 #endif // ! MLN_VALUE_LUT_VEC_HH