27 #ifndef MLN_TRAIT_IMAGES_HH
28 # define MLN_TRAIT_IMAGES_HH
43 # include <mln/trait/undef.hh>
44 # include <mln/trait/image/props.hh>
45 # include <mln/trait/value_.hh>
47 # include <mln/metal/bexpr.hh>
48 # include <mln/metal/equal.hh>
49 # include <mln/metal/if.hh>
50 # include <mln/metal/is_const.hh>
54 # define mln_trait_image_category(I) typename mln::trait::image_< I >::category
55 # define mln_trait_image_speed(I) typename mln::trait::image_< I >::speed
56 # define mln_trait_image_size(I) typename mln::trait::image_< I >::size
58 # define mln_trait_image_value_access(I) typename mln::trait::image_< I >::value_access
59 # define mln_trait_image_value_storage(I) typename mln::trait::image_< I >::value_storage
60 # define mln_trait_image_value_browsing(I) typename mln::trait::image_< I >::value_browsing
61 # define mln_trait_image_value_io(I) typename mln::trait::image_< I >::value_io
62 # define mln_trait_image_pw_io(I) typename mln::trait::image_< I >::pw_io
63 # define mln_trait_image_vw_io(I) typename mln::trait::image_< I >::vw_io
64 # define mln_trait_image_vw_set(I) typename mln::trait::image_< I >::vw_set
65 # define mln_trait_image_value_alignment(I) typename mln::trait::image_< I>::value_alignment
67 # define mln_trait_image_localization(I) typename mln::trait::image_< I >::localization
68 # define mln_trait_image_dimension(I) typename mln::trait::image_< I >::dimension
70 # define mln_trait_image_ext_domain(I) typename mln::trait::image_< I >::ext_domain
71 # define mln_trait_image_ext_value(I) typename mln::trait::image_< I >::ext_value
72 # define mln_trait_image_ext_io(I) typename mln::trait::image_< I >::ext_io
74 # define mln_trait_image_kind(I) typename mln::trait::image_< I >::kind
75 # define mln_trait_image_nature(I) typename mln::trait::image_< I >::nature
76 # define mln_trait_image_quant(I) typename mln::trait::image_< I >::quant
81 # define mln_internal_trait_image_value_io_from(I) \
83 mlc_if( mlc_is_const(I), \
84 mln::trait::image::value_io::read_only, \
85 mln_trait_image_value_io(I) )
87 # define mln_internal_trait_image_pw_io_from(I) \
89 mlc_if( mlc_is_const(I), \
90 mln::trait::image::pw_io::read, \
91 mln_trait_image_pw_io(I) )
94 # define mln_internal_trait_image_vw_io_from(I) \
96 mlc_if( mlc_is_const(I), \
97 mln::trait::image::vw_io::read, \
98 mln_trait_image_vw_io(I) )
101 # define mln_internal_trait_image_speed_from(I) \
103 mlc_if( mlc_equal( mln_trait_image_speed(I), mln::trait::image::speed::fastest ), \
104 mln::trait::image::speed::fast, \
105 mln_trait_image_speed(I) )
113 template <
typename T>
struct image1d;
114 template <
typename T>
class image2d;
115 template <
typename T>
struct image3d;
116 namespace pw {
template <
typename F,
typename S>
class image; }
119 template <
typename I,
typename F>
struct image_if_base;
120 template <
typename I,
typename D>
struct decorated_image;
121 template <
typename I,
typename S>
class sub_image;
122 template <
typename I>
class safe_image;
123 template <
typename T,
typename I>
struct cast_image_;
124 namespace value {
template <
unsigned n,
typename I>
struct stack_image; }
130 template <
typename I>
131 struct undefined_image_
134 typedef undef category;
140 typedef undef vw_set;
141 typedef undef value_alignment;
142 typedef undef value_access;
143 typedef undef value_storage;
144 typedef undef value_browsing;
145 typedef undef value_io;
149 typedef undef localization;
150 typedef undef dimension;
153 typedef undef ext_domain;
154 typedef undef ext_value;
155 typedef undef ext_io;
159 typedef undef nature;
164 template <
typename I>
165 struct image_ : undefined_image_<I>
170 template <
typename I>
171 struct image_<const I> : image_<I>
177 template <
typename T,
typename I>
178 struct default_image_ : undefined_image_<I>
181 typedef mlc_equal(mln_trait_value_quant(T),
182 trait::value::quant::high) is_high_quant_;
184 typedef mln_trait_value_kind(T) kind;
185 typedef mlc_if( is_high_quant_,
186 trait::image::quant::high,
187 trait::image::quant::low ) quant;
191 typedef trait::image::speed::fast speed;
195 template <typename D, typename T, typename I>
196 struct default_image_morpher : default_image_<T, I>
199 typedef typename image_<D>::size size;
200 typedef mln_internal_trait_image_speed_from(D) speed;
203 typedef typename image_<D>::localization localization;
204 typedef typename image_<D>::dimension dimension;
207 typedef typename image_<D>::value_alignment value_alignment;
208 typedef typename image_<D>::value_access value_access;
209 typedef typename image_<D>::value_storage value_storage;
210 typedef typename image_<D>::value_browsing value_browsing;
212 typedef mln_internal_trait_image_value_io_from(D) value_io;
215 typedef mln_internal_trait_image_vw_io_from(D) vw_io;
216 typedef typename image_<D>::vw_set vw_set;
220 typedef mln_internal_trait_image_pw_io_from(D) pw_io;
223 typedef typename image_<D>::ext_domain ext_domain;
224 typedef typename image_<D>::ext_value ext_value;
225 typedef typename image_<D>::ext_io ext_io;
228 typedef typename image_<D>::nature nature;
229 typedef typename image_<D>::kind kind;
230 typedef typename image_<D>::quant quant;
239 # include <mln/trait/image/print.hh>
242 #endif // ! MLN_TRAIT_IMAGES_HH