27 #ifndef MLN_MORPHO_TREE_COMPUTE_ATTRIBUTE_IMAGE_HH
28 # define MLN_MORPHO_TREE_COMPUTE_ATTRIBUTE_IMAGE_HH
36 # include <mln/core/routine/duplicate.hh>
37 # include <mln/core/concept/image.hh>
38 # include <mln/morpho/tree/data.hh>
39 # include <mln/trait/accumulators.hh>
40 # include <mln/util/pix.hh>
41 # include <mln/data/fill.hh>
80 template <
typename A,
typename T>
81 mln_ch_value(
typename T::function, mln_result(A))
84 mln_ch_value(typename
T::function, A)* accu_image = 0);
98 template <typename A, typename
T, typename V>
99 mln_ch_value(typename T::function, mln_result(A))
102 const Image<V>& values,
103 mln_ch_value(typename T::function, A)* accu_image = 0);
107 # ifndef MLN_INCLUDE_ONLY
112 template <
typename A,
typename I,
typename P>
113 void take_as_init (trait::accumulator::when_pix::use_none, A& accu,
114 const I& input,
const P&
p)
121 template <
typename A,
typename I,
typename P>
122 void take_as_init (trait::accumulator::when_pix::use_pix, A& accu,
123 const I& input,
const P& p)
128 template <
typename A,
typename I,
typename P>
129 void take_as_init (trait::accumulator::when_pix::use_v, A& accu,
130 const I& input,
const P& p)
132 accu.take_as_init(input(p));
135 template <
typename A,
typename I,
typename P>
136 void take_as_init (trait::accumulator::when_pix::use_p, A& accu,
137 const I& input,
const P& p)
140 accu.take_as_init(p);
144 template <
typename A,
typename I,
typename P>
147 take_as_init (mln_trait_accumulator_when_pix(A)(), accu, input, p);
151 template <
typename A,
typename T,
typename V>
153 mln_ch_value(
typename T::function, mln_result(A))
157 mln_ch_value(typename T::function, A)* accu_image = 0)
160 typedef typename T::function I;
161 mln_ch_value(I, A) acc;
174 mln_site_piter(T) p(t);
176 take_as_init(acc(p), values, p);
180 mln_up_site_piter(T) p(t);
184 acc(t.parent(p)).take(acc(p));
193 mln_assertion(t.is_a_node(t.parent(p)));
194 acc(p) = acc(t.parent(p));
203 typedef typename T::function I;
204 mln_ch_value(I, mln_result(A)) output;
214 template <typename A, typename T>
216 mln_ch_value(typename T::function, mln_result(A))
219 mln_ch_value(typename T::function, A)* accu_image)
221 mln_trace(
"morpho::tree::compute_attribute_image");
223 mln_ch_value(
typename T::function, mln_result(A)) output;
230 template <typename A, typename T, typename V>
232 mln_ch_value(typename T::function, mln_result(A))
235 const Image<V>& values,
236 mln_ch_value(typename T::function, A)* accu_image)
238 mln_trace(
"morpho::tree::compute_attribute_image_from");
241 mln_ch_value(
typename T::function, mln_result(A)) output;
251 # endif // ! MLN_INCLUDE_ONLY
260 #endif // ! MLN_MORPHO_TREE_COMPUTE_ATTRIBUTE_IMAGE_HH