26 #ifndef MLN_CORE_INTERNAL_SITE_SET_IMPL_HH
27 # define MLN_CORE_INTERNAL_SITE_SET_IMPL_HH
32 # include <mln/core/concept/site_set.hh>
33 # include <mln/accu/shape/bbox.hh>
45 template <
typename Sc>
52 template <
typename trait_nsites,
typename Sc>
53 struct site_set_impl__nsites
57 void update_nsites_(
const T&);
60 template <
typename Sc>
61 struct site_set_impl__nsites< trait::site_set::nsites::known, Sc>
63 site_set_impl__nsites();
64 unsigned nsites()
const;
66 void update_nsites_(
const mln_site(Sc)& p);
68 void update_nsites_(
const Site_Set<S>& s);
75 template <
typename trait_bbox,
typename Sc>
76 struct site_set_impl__bbox
82 void update_bbox_(
const mln_site(Sc)& p);
84 void update_bbox_(
const Site_Set<S>& s);
86 accu::shape::bbox<mln_site(Sc)> bb_;
89 template <
typename Sc>
90 struct site_set_impl__bbox< trait::site_set::nsites::unknown, Sc >
94 void update_bbox_(
const T&);
100 template <
typename Sc>
102 : site_set_impl__nsites< mln_trait_site_set_nsites(Sc), Sc>,
103 site_set_impl__bbox < mln_trait_site_set_bbox(Sc), Sc>
110 # ifndef MLN_INCLUDE_ONLY
115 template <
typename trait_nsites,
typename Sc>
116 template <
typename T>
119 site_set_impl__nsites<trait_nsites, Sc>::update_nsites_(
const T&)
124 template <
typename Sc>
126 site_set_impl__nsites<trait::site_set::nsites::known, Sc>::site_set_impl__nsites()
131 template <
typename Sc>
134 site_set_impl__nsites<trait::site_set::nsites::known, Sc>::nsites()
const
139 template <
typename Sc>
142 site_set_impl__nsites<trait::site_set::nsites::known, Sc>::update_nsites_(
const mln_site(Sc)&)
147 template <
typename Sc>
148 template <
typename S>
151 site_set_impl__nsites<trait::site_set::nsites::known, Sc>::update_nsites_(
const Site_Set<S>& s)
153 nsites_ += exact(s).nsites();
158 template <
typename trait_bbox,
typename Sc>
160 typename site_set_impl__bbox<trait_bbox, Sc>::q_box
161 site_set_impl__bbox<trait_bbox, Sc>::bbox()
const
163 return bb_.to_result();
166 template <
typename trait_bbox,
typename Sc>
169 site_set_impl__bbox<trait_bbox, Sc>::update_bbox_(
const mln_site(Sc)& p)
174 template <
typename trait_bbox,
typename Sc>
175 template <
typename S>
178 site_set_impl__bbox<trait_bbox, Sc>::update_bbox_(
const Site_Set<S>& s)
180 bb_.take(exact(s).bbox());
183 template <
typename Sc>
184 template <
typename T>
187 site_set_impl__bbox< trait::site_set::nsites::unknown, Sc >::update_bbox_(
const T&)
192 # endif // ! MLN_INCLUDE_ONLY
199 #endif // ! MLN_CORE_INTERNAL_SITE_SET_IMPL_HH