26 #ifndef MLN_CORE_SITE_SET_P_QUEUE_HH
27 # define MLN_CORE_SITE_SET_P_QUEUE_HH
41 # include <mln/core/site_set/p_array.hh>
48 template <
typename P>
class p_queue;
55 struct site_set_< p_queue<P> >
57 typedef trait::site_set::nsites::known
nsites;
58 typedef trait::site_set::bbox::unknown bbox;
59 typedef trait::site_set::contents::growing contents;
60 typedef trait::site_set::arity::multiple arity;
74 class p_queue :
public internal::site_set_base_< P, p_queue<P> >
104 bool has(
const util::index& i)
const;
115 void push(
const P& p);
130 const P&
front()
const;
159 # ifndef MLN_INCLUDE_ONLY
161 template <
typename P>
167 template <
typename P>
172 mln_precondition(p.target_() ==
this);
173 if (p.index() < 0 || unsigned(p.index()) >= nsites())
176 mln_invariant(p.to_site() == (*this)[p.index()]);
180 template <
typename P>
185 return i >= 0 && unsigned(i) < nsites();
188 template <
typename P>
196 template <
typename P>
204 template <
typename P>
212 template <
typename P>
217 mln_precondition(! this->is_empty());
221 template <
typename P>
226 mln_precondition(! this->is_empty());
230 template <
typename P>
235 mln_precondition(! this->is_empty());
236 P res = this->front();
241 template <
typename P>
249 template <
typename P>
254 mln_precondition(i < nsites());
258 template <
typename P>
266 template <
typename P>
274 template <
typename P>
279 return sizeof(q_) + nsites() *
sizeof(P);
282 # endif // ! MLN_INCLUDE_ONLY
287 #endif // ! MLN_CORE_SITE_SET_P_QUEUE_HH