27 #ifndef MLN_CORE_SITE_SET_P_VACCESS_HH
28 # define MLN_CORE_SITE_SET_P_VACCESS_HH
36 # include <mln/core/concept/site_set.hh>
37 # include <mln/core/site_set/p_double.hh>
38 # include <mln/core/internal/site_set_base.hh>
39 # include <mln/core/internal/pseudo_site_base.hh>
40 # include <mln/core/internal/site_set_impl.hh>
41 # include <mln/value/set.hh>
48 template <
typename V,
typename S>
class p_vaccess;
55 template <
typename V,
typename S>
56 struct site_set_< p_vaccess<V,S> >
58 typedef mln_trait_site_set_nsites(S)
nsites;
59 typedef mln_trait_site_set_bbox(S)
bbox;
71 template <typename V, typename S>
72 class
p_vaccess : public internal::site_set_base_< mln_site(S),
74 public internal::site_set_impl< S >
108 bool has(
const psite&
p)
const;
112 bool has(
const V& v,
const mln_psite(S)&
p)
const;
115 bool is_valid()
const;
125 void insert(const i_element& v_e);
128 void insert(const V& v, const element& e);
136 const mln::value::
set<V>& values() const;
139 const S& operator()(const V& v) const;
143 std::
size_t memory_size() const;
147 const mln::value::
set<V>& set_1_() const;
148 const S& set_2_(const V& v) const;
160 # ifndef MLN_INCLUDE_ONLY
165 template <
typename V,
typename S>
173 template <
typename V,
typename S>
181 template <
typename V,
typename S>
190 template <
typename V,
typename S>
195 return ps_[vs_.index_of(v)].has(p);
198 template <
typename V,
typename S>
207 template <
typename V,
typename S>
212 ps_[vs_.index_of(v)].insert(e);
213 this->update_nsites_(e);
214 this->update_bbox_(e);
217 template <
typename V,
typename S>
222 insert(v_e.first, v_e.second);
225 template <
typename V,
typename S>
230 const unsigned n = ps_.size();
231 for (
unsigned i = 0; i < n; ++i)
235 template <
typename V,
typename S>
240 return ps_[vs_.index_of(v)];
243 template <
typename V,
typename S>
249 const unsigned n = ps_.size();
250 for (
unsigned i = 0; i < n; ++i)
251 mem += ps_[i].memory_size();
252 return sizeof(*this) + mem;
255 template <
typename V,
typename S>
263 template <
typename V,
typename S>
266 p_vaccess<V,S>::set_1_()
const
271 template <
typename V,
typename S>
274 p_vaccess<V,S>::set_2_(
const V& v)
const
276 return ps_[vs_.index_of(v)];
279 # endif // ! MLN_INCLUDE_ONLY
284 #endif // ! MLN_CORE_SITE_SET_P_VACCESS_HH