26 #ifndef MLN_SET_CARD_HH
27 # define MLN_SET_CARD_HH
33 # include <mln/core/concept/site_set.hh>
44 unsigned card(
const Site_Set<S>& s);
47 # ifndef MLN_INCLUDE_ONLY
61 unsigned card(
const Site_Set<S>& s_)
63 trace::entering(
"set::impl::generic::card");
64 const S& s = exact(s_);
65 mln_precondition(s.is_valid());
72 trace::exiting("set::impl::generic::
card");
83 unsigned card_from_method(const Site_Set<S>& s)
85 trace::entering(
"set::impl::card_from_method");
86 unsigned n = exact(s).nsites();
87 trace::exiting(
"set::impl::card_from_method");
100 template <
typename S>
102 unsigned card_dispatch(mln::trait::site_set::nsites::any,
103 const Site_Set<S>& s)
105 return impl::generic::card(s);
108 template <
typename S>
110 unsigned card_dispatch(mln::trait::site_set::nsites::known,
111 const Site_Set<S>& s)
113 return impl::card_from_method(s);
118 template <
typename S>
120 unsigned card_dispatch(
const Site_Set<S>& s)
122 return card_dispatch(mln_trait_site_set_nsites(S)(),
132 template <
typename S>
136 trace::entering(
"set::card");
137 mln_precondition(exact(s).is_valid());
139 unsigned n = internal::card_dispatch(s);
141 trace::exiting(
"set::card");
145 # endif // ! MLN_INCLUDE_ONLY
152 #endif // ! MLN_SET_CARD_HH