26 #ifndef MLN_MORPHO_TREE_PROPAGATE_NODE_HH
27 # define MLN_MORPHO_TREE_PROPAGATE_NODE_HH
29 # include <mln/core/concept/image.hh>
30 # include <mln/core/macros.hh>
31 # include <mln/morpho/tree/data.hh>
57 template <
typename T,
typename A>
62 const mln_value(A)& v,
63 unsigned* nb_leaves = 0);
74 template <
typename T,
typename A>
80 unsigned* nb_leaves = 0);
91 template <
typename T,
typename A>
96 const mln_value(A)& v);
105 template <
typename T,
typename A>
113 # ifndef MLN_INCLUDE_ONLY
117 template <
typename T,
typename A>
123 const mln_value(A)& v,
127 mln_precondition(a.is_valid());
128 mln_precondition(a.domain() == t.f().domain());
129 mln_precondition(a.domain().has(n));
134 mln_assertion(t.is_a_node(n));
136 typename T::depth1st_piter pp(t, n);
141 *nb_leaves += t.is_a_leaf(pp);
143 for (pp.next(); pp.is_valid(); pp.next())
146 if (nb_leaves && t.is_a_leaf(pp))
152 template <
typename T,
typename A>
158 unsigned* nb_leaves = 0)
168 template <
typename T,
typename A>
173 const mln_value(A)& v)
176 mln_precondition(a.is_valid());
177 mln_precondition(a.domain() == t.f().domain());
178 mln_precondition(a.domain().has(n));
182 mln_assertion(t.is_a_node(n));
190 }
while (!t.is_root(n));
194 template <
typename T,
typename A>
205 # endif // ! MLN_INCLUDE_ONLY
213 #endif // ! MLN_MORPHO_TREE_PROPAGATE_NODE_HH