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>
164 template <
typename I>
170 template <
typename I>
177 template <
typename T,
typename I>
181 typedef mlc_equal(mln_trait_value_quant(
T),
182 trait::value::quant::high) is_high_quant_;
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;
198 template <
typename D,
typename T,
typename I>
203 typedef mln_internal_trait_image_speed_from(D)
speed;
215 typedef mln_internal_trait_image_value_io_from(D)
value_io;
218 typedef mln_internal_trait_image_vw_io_from(D)
vw_io;
223 typedef mln_internal_trait_image_pw_io_from(D)
pw_io;
242 # include <mln/trait/image/print.hh>
245 #endif // ! MLN_TRAIT_IMAGES_HH