27 #ifndef MLN_CORE_INTERNAL_IS_MASKED_IMPL_SELECTOR_HH
28 # define MLN_CORE_INTERNAL_IS_MASKED_IMPL_SELECTOR_HH
34 # include <mln/util/edge.hh>
41 template <
typename G,
typename F>
class p_edges;
42 template <
typename G,
typename F>
class p_vertices;
51 template <
typename S,
typename D,
typename E>
52 struct is_masked_impl_selector
55 bool is_masked(
const mln_graph_element(S)& center,
56 const mln_graph_element(S)& element)
const;
60 template <
typename G1,
typename F1,
typename G2,
typename F2,
typename E>
61 struct is_masked_impl_selector< p_vertices<G1,F1>, p_edges<G2,F2>, E >
63 typedef p_vertices<G1,F1> S;
66 bool is_masked(
const mln_graph_element(S)& center,
67 const mln_graph_element(S)& element)
const;
71 template <
typename G1,
typename F1,
typename G2,
typename F2,
typename E>
72 struct is_masked_impl_selector< p_edges<G1,F1>, p_vertices<G2,F2>, E >
74 typedef p_edges<G1,F1> S;
77 bool is_masked(
const mln_graph_element(S)& center,
78 const mln_graph_element(S)& element)
const;
82 # ifndef MLN_INCLUDE_ONLY
85 template <
typename S,
typename I,
typename E>
88 is_masked_impl_selector<S,I,E>::is_masked(
const mln_graph_element(S)& center,
89 const mln_graph_element(S)& element)
const
92 E& iter = internal::force_exact<E>(*this);
93 return ! iter.target_()->mask()(element.id());
97 template <
typename G1,
typename F1,
typename G2,
typename F2,
typename E>
100 is_masked_impl_selector< p_vertices<G1,F1>, p_edges<G2,F2>, E >
101 ::is_masked(
const mln_graph_element(S)& center,
102 const mln_graph_element(S)& element)
const
104 E& iter = internal::force_exact<E>(*this);
106 util::edge<G1> e = center.edge_with(element);
107 mln_postcondition(e.is_valid());
109 return ! iter.target_()->mask()(e.id());
119 template <
typename G1,
typename F1,
typename G2,
typename F2,
typename E>
122 is_masked_impl_selector< p_edges<G1,F1>, p_vertices<G2,F2>, E >
123 ::is_masked(
const mln_graph_element(S)& center,
124 const mln_graph_element(S)& element)
const
126 E& iter = internal::force_exact<E>(*this);
128 if (center.v1() == element.v2() || center.v2() == element.v2())
129 return ! iter.target_()->mask()(element.v1());
132 return ! iter.target_()->mask()(element.v2());
135 # endif // ! MLN_INCLUDE_ONLY
142 #endif // ! MLN_CORE_INTERNAL_IS_MASKED_IMPL_SELECTOR_HH