26 #ifndef MLN_CORE_SITE_SET_P_SET_HH
27 # define MLN_CORE_SITE_SET_P_SET_HH
34 # include <mln/core/site_set/p_array.hh>
35 # include <mln/util/set.hh>
42 template <
typename P>
class p_set;
49 struct site_set_< p_set<P> >
51 typedef trait::site_set::nsites::known
nsites;
52 typedef trait::site_set::bbox::unknown bbox;
53 typedef trait::site_set::contents::free contents;
54 typedef trait::site_set::arity::unique arity;
70 class p_set :
public internal::site_set_base_< P, p_set<P> >
99 bool has(
const P& p)
const;
102 bool has(
const util::index& i)
const;
122 void remove(
const P& p);
148 # ifndef MLN_INCLUDE_ONLY
150 template <
typename P>
156 template <
typename P>
164 template <
typename P>
169 mln_precondition(p.target_() ==
this);
170 if (! has(p.index()))
172 mln_invariant(p.to_site() == (*this)[p.index()]);
176 template <
typename P>
181 return i >= 0 && unsigned(i) < nsites();
184 template <
typename P>
192 template <
typename P>
197 return s_.nelements();
200 template <
typename P>
208 template <
typename P>
216 template <
typename P>
224 template <
typename P>
229 mln_precondition(i < nsites());
233 template <
typename P>
238 return s_.memory_size();
241 template <
typename P>
243 const std::vector<P>&
246 return s_.std_vector();
249 template <
typename P>
257 # endif // ! MLN_INCLUDE_ONLY
262 #endif // ! MLN_CORE_SITE_SET_P_SET_HH