27 #ifndef MLN_CORE_INTERNAL_NEIGHB_NITER_IMPL_HH
28 # define MLN_CORE_INTERNAL_NEIGHB_NITER_IMPL_HH
34 # include <mln/core/macros.hh>
35 # include <mln/core/internal/force_exact.hh>
42 template <
typename P,
typename W>
class graph_window_base;
46 template <
typename G,
typename F>
class line_graph_elt_window;
49 template <
typename G>
class vertex;
50 template <
typename G>
class edge;
58 template <
typename W,
typename E>
59 struct neighb_niter_impl
76 template <
typename P,
typename E>
77 struct neighb_niter_impl_graph_window
81 return internal::force_exact<E>(*this).compute_p_().id();
91 template <
typename G,
typename E>
92 struct neighb_niter_impl_graph_window< util::vertex<G>, E >
101 template <
typename G,
typename E>
102 struct neighb_niter_impl_graph_window< util::
edge<G>, E >
109 template <
typename P,
typename T,
typename E>
110 struct neighb_niter_impl< graph_window_base<P, T>, E >
111 : neighb_niter_impl_graph_window<P,E>
113 typedef typename T::target S;
118 mln_graph_element(S) element()
const
120 return internal::force_exact<E>(*this).compute_p_().element();
129 template <
typename G,
typename S,
typename E>
131 :
public neighb_niter_impl< graph_window_base< mln_result(S::fun_t),
132 graph_elt_window<G,S> >,
140 template <
typename G,
typename F,
typename E>
141 struct neighb_niter_impl<line_graph_elt_window<G,F>, E>
142 :
public neighb_niter_impl< graph_window_base< mln_result(F),
143 line_graph_elt_window<G, F> >,
152 template <
typename G,
typename S,
typename I,
typename E>
154 :
public neighb_niter_impl< graph_window_base< mln_result(S::fun_t),
155 graph_elt_window_if<G,S,I> >,
164 template <
typename G,
typename S,
typename S2,
typename E>
166 :
public neighb_niter_impl< graph_window_base< mln_result(S2::fun_t),
167 graph_elt_mixed_window<G,S,S2> >,
178 #endif // ! MLN_CORE_INTERNAL_NEIGHB_NITER_IMPL_HH