30 #ifndef MLN_GEOM_VERTICAL_SYMMETRY_HH
31 # define MLN_GEOM_VERTICAL_SYMMETRY_HH
33 # include <mln/core/concept/image.hh>
34 # include <mln/core/box_runend_piter.hh>
35 # include <mln/core/box_runstart_piter.hh>
50 # ifndef MLN_INCLUDE_ONLY
65 const I& input = exact(input_);
66 mln_precondition(input.is_valid());
68 mln_concrete(I) output(input.domain());
70 typedef mln_site(I) P;
79 mln_site(I) idi = pi, ido = po;
81 for (
unsigned n = 0; n < ncols; ++n, ++idi[1], --ido[1])
82 output(ido) = input(idi);
93 vertical_symmetry_fastest(const Image<I>& input_)
95 const I& input = exact(input_);
96 mln_precondition(input.is_valid());
98 mln_concrete(I) output(input.domain());
100 typedef mln_site(I) P;
101 box_runstart_piter<P>
105 unsigned ncols = input.ncols();
107 typedef mln_value(I)* ptr_t;
111 const mln_value(I)* ptr_in = & input(pi);
112 ptr_t ptr_out = (& output(po)) + ncols - 1;
114 for (
unsigned n = 0; n <
ncols; ++n)
115 *ptr_out-- = *ptr_in++;
131 template <
typename I>
133 vertical_symmetry_dispatch(
134 trait::image::value_alignment::any,
135 trait::image::value_storage::any,
136 trait::image::value_access::any,
137 const Image<I>& input)
139 return impl::generic::vertical_symmetry(input);
143 template <
typename I>
145 vertical_symmetry_dispatch(
146 trait::image::value_alignment::with_grid,
147 trait::image::value_storage::one_block,
148 trait::image::value_access::direct,
149 const Image<I>& input)
151 return impl::vertical_symmetry_fastest(input);
155 template <
typename I>
157 vertical_symmetry_dispatch(const Image<I>& input)
159 return vertical_symmetry_dispatch(
160 mln_trait_image_value_alignment(I)(),
161 mln_trait_image_value_storage(I)(),
162 mln_trait_image_value_access(I)(),
172 template <
typename I>
176 trace::entering(
"geom::vertical_symmetry");
178 const I& input = exact(input_);
179 mln_precondition(input.is_valid());
181 mln_concrete(I) output = internal::vertical_symmetry_dispatch(input);
183 trace::exiting(
"geom::vertical_symmetry");
188 # endif // ! MLN_INCLUDE_ONLY
196 #endif // ! MLN_GEOM_VERTICAL_SYMMETRY_HH