26 #ifndef SCRIBO_PRIMITIVE_INTERNAL_FIND_LINK_HH
27 # define SCRIBO_PRIMITIVE_INTERNAL_FIND_LINK_HH
33 # include <mln/core/concept/image.hh>
35 # include <mln/math/abs.hh>
37 # include <mln/util/array.hh>
38 # include <mln/util/couple.hh>
40 # include <scribo/core/concept/link_functor.hh>
41 # include <scribo/core/tag/anchor.hh>
42 # include <scribo/core/object_links.hh>
66 find_link(Link_Functor<F>& functor,
unsigned current_object,
70 # ifndef MLN_INCLUDE_ONLY
74 find_link(Link_Functor<F>& functor_,
unsigned current_object,
77 F& functor =
exact(functor_);
79 functor.initialize_link(current_object);
81 mln_site(scribo_support_(F))
82 start_point = functor.start_point(current_object, anchor),
87 while (functor.
components().labeled_image().domain().has(p)
88 && ! functor.is_potential_link(current_object,
90 && functor.verify_link_criterion(current_object, start_point,
92 functor.compute_next_site(p);
94 if (functor.valid_link(current_object, start_point, p, anchor))
95 functor.validate_link(current_object, start_point, p, anchor);
97 functor.invalidate_link(current_object, start_point, p, anchor);
99 functor.finalize_link(current_object);
101 bool b = (functor.link(current_object) != current_object);
102 return mln::make::couple(b, p);
105 # endif // MLN_INCLUDE_ONLY
115 #endif // ! SCRIBO_PRIMITIVE_INTERNAL_FIND_LINK_HH