27 #ifndef MLN_CORE_IMAGE_VMORPH_VIOLENT_CAST_IMAGE_HH
28 # define MLN_CORE_IMAGE_VMORPH_VIOLENT_CAST_IMAGE_HH
35 # include <mln/core/internal/image_value_morpher.hh>
36 # include <mln/value/set.hh>
37 # include <mln/value/cast.hh>
44 template <
typename T,
typename I>
struct violent_cast_image;
51 template <
typename T,
typename I>
52 struct data< violent_cast_image<
T,I> >
64 template <
typename T,
typename I,
typename value_io>
68 typedef trait::image::vw_io::none
vw_io;
69 typedef trait::image::vw_set::none
vw_set;
72 template <
typename T,
typename I>
76 typedef trait::image::vw_io::read
vw_io;
79 template <
typename T,
typename I>
83 typedef trait::image::vw_io::read
vw_io;
86 template <
typename T,
typename I>
91 typedef mlc_equal(mln_trait_value_quant(
T),
92 trait::value::quant::high) is_high_quant_;
94 typedef mlc_if(is_high_quant_,
95 trait::image::quant::high,
96 trait::image::quant::low)
quant;
98 typedef trait::image::value_io::read_only
value_io;
99 typedef trait::image::pw_io::read
pw_io;
100 typedef trait::image::value_access::indirect
value_access;
101 typedef trait::image::category::value_morpher
category;
104 typedef trait::image::ext_domain::none
ext_domain;
114 template <
typename T,
typename I>
146 template <
typename T,
typename I>
150 mln_precondition(
exact(ima).is_valid());
156 # ifndef MLN_INCLUDE_ONLY
164 template <
typename T,
typename I>
175 template <
typename T,
typename I>
177 violent_cast_image<T,I>::violent_cast_image(
const Image<I>& ima)
179 metal::bool_<sizeof(T) == sizeof(typename I::value)>::check();
180 mln_precondition(
exact(ima).is_valid());
181 this->data_ =
new internal::data< violent_cast_image<T,I> >(
exact(ima));
184 template <
typename T,
typename I>
187 violent_cast_image<T,I>::init_(
const Image<I>& ima)
189 mln_precondition(
exact(ima).is_valid());
190 this->data_ =
new internal::data<violent_cast_image<T,I> >(
exact(ima));
193 template <
typename T,
typename I>
196 violent_cast_image<T,I>::operator()(
const mln_psite(I)& p)
const
198 mln_precondition(this->data_->ima_.has(p));
199 return *(
T*)(
void*)&( this->data_->ima_(p) );
202 template <
typename T,
typename I>
205 violent_cast_image<T,I>::operator()(
const mln_psite(I)& p)
207 return *(
T*)(
void*)&( this->data_->ima_(p) );
210 # endif // ! MLN_INCLUDE_ONLY
215 #endif // ! MLN_CORE_IMAGE_VMORPH_VIOLENT_CAST_IMAGE_HH