diff options
author | vng <viktor.govako@gmail.com> | 2011-01-09 21:33:05 +0300 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:09:39 +0300 |
commit | cec2fa4919acc3e4eafc3de5e3d7af73d94e9d95 (patch) | |
tree | 25543d3789e094dd1128cd1966eece28e0d085a9 /geometry/tree4d.hpp | |
parent | 7f7394f4a5f286f6c59c86c02df21f1669a4f2a8 (diff) |
Make simple for_each function in kdtree++. Delete other 'visitors'.
Diffstat (limited to 'geometry/tree4d.hpp')
-rw-r--r-- | geometry/tree4d.hpp | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/geometry/tree4d.hpp b/geometry/tree4d.hpp index 858f4d0445..9ab5e791c8 100644 --- a/geometry/tree4d.hpp +++ b/geometry/tree4d.hpp @@ -38,7 +38,6 @@ namespace m4 }; typedef KDTree::KDTree<4, value_t> tree_t; - typedef typename tree_t::template dim_region_type<2>::type region_t; tree_t m_tree; typedef vector<value_t const *> store_vec_t; @@ -59,6 +58,26 @@ namespace m4 if (v.IsIntersect(m_rect)) m_isect.push_back(&v); } + + bool ScanLeft(size_t plane, value_t const & v) const + { + switch (plane & 3) // % 4 + { + case 2: return m_rect.minX() < v[2]; + case 3: return m_rect.minY() < v[3]; + default: return true; + } + } + + bool ScanRight(size_t plane, value_t const & v) const + { + switch (plane & 3) // % 4 + { + case 0: return m_rect.maxX() > v[0]; + case 1: return m_rect.maxY() > v[1]; + default: return true; + } + } }; public: @@ -66,15 +85,8 @@ namespace m4 template <class TCompare> void ReplaceIf(T const & obj, m2::RectD const & rect, TCompare comp) { - region_t rgn; - rgn._M_low_bounds[0] = rect.minX(); - rgn._M_high_bounds[0] = rect.maxX(); - rgn._M_low_bounds[1] = rect.minY(); - rgn._M_high_bounds[1] = rect.maxY(); - store_vec_t isect; - - m_tree.visit_within_range(rgn, insert_if_intersect(isect, rect)); + m_tree.for_each(insert_if_intersect(isect, rect)); for (size_t i = 0; i < isect.size(); ++i) if (!comp(obj, isect[i]->m_val)) |