27 #ifndef MLN_OPT_ELEMENT_HH
28 # define MLN_OPT_ELEMENT_HH
34 # include <mln/core/concept/image.hh>
35 # include <mln/trait/images.hh>
45 mln_rvalue(I)
element(const Image<I>& ima,
unsigned index);
49 mln_lvalue(I)
element(Image<I>& ima,
unsigned index);
56 # ifndef MLN_INCLUDE_ONLY
63 mln_rvalue(I) element_impl(trait::image::category::domain_morpher,
64 const Image<I>& ima,
unsigned index)
72 mln_rvalue(I) element_impl(trait::image::category::any,
73 const Image<I>& ima,
unsigned index)
75 mlc_and(mlc_is(mln_trait_image_value_storage(I),
76 trait::image::value_storage::one_block),
77 mlc_is(mln_trait_image_value_access(I),
78 trait::image::value_access::direct))::check();
80 return exact(ima).element(index);
86 mln_lvalue(I) element_impl(trait::image::category::domain_morpher,
87 Image<I>& ima,
unsigned index)
95 mln_lvalue(I) element_impl(trait::image::category::any,
96 Image<I>& ima,
unsigned index)
98 mlc_and(mlc_is(mln_trait_image_value_storage(I),
99 trait::image::value_storage::one_block),
100 mlc_is(mln_trait_image_value_access(I),
101 trait::image::value_access::direct))::check();
103 return exact(ima).element(index);
109 template <
typename I>
111 unsigned nelements_impl(trait::image::category::domain_morpher,
117 template <
typename I>
119 unsigned nelements_impl(trait::image::category::any,
122 mlc_is(mln_trait_image_value_storage(I),
123 trait::image::value_storage::one_block)::check();
125 return exact(ima).nelements();
136 template <
typename I>
138 mln_rvalue(I)
element(const Image<I>& ima,
unsigned index)
140 return impl::element_impl(mln_trait_image_category(I)(), ima, index);
143 template <
typename I>
145 mln_lvalue(I)
element(Image<I>& ima,
unsigned index)
147 return impl::element_impl(mln_trait_image_category(I)(), ima, index);
151 template <
typename I>
155 return impl::nelements_impl(mln_trait_image_category(I)(), ima);
158 # endif // ! MLN_INCLUDE_ONLY
165 #endif // ! MLN_OPT_ELEMENT_HH