27 #ifndef MLN_ACCU_COMPUTE_HH
28 # define MLN_ACCU_COMPUTE_HH
37 # include <mln/core/concept/meta_accumulator.hh>
38 # include <mln/core/concept/image.hh>
39 # include <mln/util/pix.hh>
62 template <
typename A,
typename I>
64 compute(const Accumulator<A>& a, const Image<I>& input);
81 template <typename A, typename I>
82 mln_meta_accu_result(A, util::pix<I>)
83 compute(const Meta_Accumulator<A>& a, const Image<I>& input);
87 # ifndef MLN_INCLUDE_ONLY
96 template <
typename A,
typename I>
98 compute(const Accumulator<A>&, const Image<I>& input_)
100 mln_trace(
"accu::impl::generic::compute");
102 const I& input =
exact(input_);
103 mln_precondition(input.is_valid());
106 mln_piter(I)
p(input.domain());
108 a.
take(make::pix(input,
p));
110 return a.to_result();
121 template <
typename A,
typename I>
124 compute_dispatch(const Accumulator<A>& a, const Image<I>& input)
133 template <
typename A,
typename I>
136 compute(const Accumulator<A>& a, const Image<I>& input)
138 mln_trace(
"accu::compute");
140 mln_precondition(
exact(input).is_valid());
141 mln_result(A) output = internal::compute_dispatch(a, input);
146 template <typename A, typename I>
148 mln_meta_accu_result(A, util::pix<I>)
149 compute(const Meta_Accumulator<A>& a, const Image<I>& input)
151 mln_trace(
"accu::compute");
153 mln_precondition(
exact(input).is_valid());
155 typedef mln_accu_with(A, util::pix<I>) A_;
156 util::pix<I> pix_(
exact(input), mln_psite(I)());
159 mln_result(A_) output = internal::compute_dispatch(a_, input);
164 # endif // ! MLN_INCLUDE_ONLY
171 #endif // ! MLN_ACCU_COMPUTE_HH