26 #ifndef MLN_CORE_SITE_SET_P_VACCESS_HH
27 # define MLN_CORE_SITE_SET_P_VACCESS_HH
34 # include <mln/core/concept/site_set.hh>
35 # include <mln/core/site_set/p_double.hh>
36 # include <mln/core/internal/site_set_base.hh>
37 # include <mln/core/internal/pseudo_site_base.hh>
38 # include <mln/core/internal/site_set_impl.hh>
39 # include <mln/value/set.hh>
46 template <
typename V,
typename S>
class p_vaccess;
53 template <
typename V,
typename S>
54 struct site_set_< p_vaccess<V,S> >
56 typedef mln_trait_site_set_nsites(S) nsites;
57 typedef mln_trait_site_set_bbox(S) bbox;
58 typedef trait::site_set::contents::growing contents;
59 typedef trait::site_set::arity::multiple arity;
69 template <typename V, typename S>
70 class
p_vaccess : public internal::site_set_base_< mln_site(S),
88 typedef p_double_psite<self_, S>
psite;
91 typedef p_double_piter<self_, mln_fwd_viter(vset), mln_fwd_piter(S)>
fwd_piter;
94 typedef p_double_piter<self_, mln_bkd_viter(vset), mln_bkd_piter(S)>
bkd_piter;
106 bool has(
const psite& p)
const;
110 bool has(
const V& v,
const mln_psite(S)& p)
const;
113 bool is_valid()
const;
123 void insert(const i_element& v_e);
126 void insert(const V& v, const element& e);
134 const mln::value::
set<V>& values() const;
137 const S& operator()(const V& v) const;
141 std::
size_t memory_size() const;
144 const mln::value::
set<V>& set_1_() const;
145 const S& set_2_(const V& v) const;
149 mln::value::
set<V> vs_;
156 # ifndef MLN_INCLUDE_ONLY
161 template <
typename V,
typename S>
169 template <
typename V,
typename S>
177 template <
typename V,
typename S>
186 template <
typename V,
typename S>
191 return ps_[vs_.index_of(v)].has(p);
194 template <
typename V,
typename S>
203 template <
typename V,
typename S>
208 ps_[vs_.index_of(v)].insert(e);
209 this->update_nsites_(e);
210 this->update_bbox_(e);
213 template <
typename V,
typename S>
218 insert(v_e.first, v_e.second);
221 template <
typename V,
typename S>
226 const unsigned n = ps_.size();
227 for (
unsigned i = 0; i < n; ++i)
231 template <
typename V,
typename S>
236 return ps_[vs_.index_of(v)];
239 template <
typename V,
typename S>
245 const unsigned n = ps_.size();
246 for (
unsigned i = 0; i < n; ++i)
247 mem += ps_[i].memory_size();
248 return sizeof(*this) + mem;
251 template <
typename V,
typename S>
259 template <
typename V,
typename S>
267 template <
typename V,
typename S>
270 p_vaccess<V,S>::set_2_(
const V& v)
const
272 return ps_[vs_.index_of(v)];
275 # endif // ! MLN_INCLUDE_ONLY
280 #endif // ! MLN_CORE_SITE_SET_P_VACCESS_HH