From 55021bdb9f8a3da5440f73653f672955c8ce0f41 Mon Sep 17 00:00:00 2001 From: Camille Wormser Date: Thu, 7 May 2009 09:41:38 +0000 Subject: [PATCH] KD-tree forbids copies -> a pointer now. --- AABB_tree/include/CGAL/AABB_search_tree.h | 11 ++++------- AABB_tree/include/CGAL/AABB_tree.h | 17 ++++++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/AABB_tree/include/CGAL/AABB_search_tree.h b/AABB_tree/include/CGAL/AABB_search_tree.h index e7cc91211fa..d4e42bcd182 100644 --- a/AABB_tree/include/CGAL/AABB_search_tree.h +++ b/AABB_tree/include/CGAL/AABB_search_tree.h @@ -37,14 +37,11 @@ namespace CGAL private: Tree m_tree; public: - AABB_search_tree() {} - ~AABB_search_tree() {} - template - void init(ConstPointIterator begin, ConstPointIterator beyond) - { - // m_tree = Tree(begin, beyond); - } + AABB_search_tree(ConstPointIterator begin, ConstPointIterator beyond): + m_tree(begin, beyond){} + + ~AABB_search_tree() {} // TOFIX: make it const Point closest_point(const Point& query) diff --git a/AABB_tree/include/CGAL/AABB_tree.h b/AABB_tree/include/CGAL/AABB_tree.h index 3b68de9a361..996291a6979 100644 --- a/AABB_tree/include/CGAL/AABB_tree.h +++ b/AABB_tree/include/CGAL/AABB_tree.h @@ -70,7 +70,11 @@ namespace CGAL { bool rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond); /// Non virtual destructor - ~AABB_tree() { clear(); } + ~AABB_tree() { + clear(); + if(m_search_tree_constructed) + delete(m_search_tree); + } /// Clears the tree void clear(void) @@ -349,7 +353,7 @@ namespace CGAL { // single root node Node* m_p_root; // search KD-tree - Search_tree m_search_tree; + Search_tree* m_search_tree; bool m_search_tree_constructed; private: @@ -425,7 +429,7 @@ namespace CGAL { AABB_tree::construct_search_tree(ConstPointIterator first, ConstPointIterator beyond) { - m_search_tree.init(first, beyond); + m_search_tree = new Search_tree(first, beyond); m_search_tree_constructed = true; } @@ -436,14 +440,13 @@ namespace CGAL { CGAL_assertion(!m_data.empty()); // iterate over primitives to get points on them - std::list points; + std::vector points; typename std::vector::const_iterator it; for(it = m_data.begin(); it != m_data.end(); ++it) { points.push_back(it->reference_point()); } - m_search_tree.init(points.begin(), points.end()); - m_search_tree_constructed = true; + construct_search_tree(points.begin(), points.end()); } template @@ -547,7 +550,7 @@ namespace CGAL { { Point hint; if(m_search_tree_constructed) - hint = m_search_tree.closest_point(query); // pick closest neighbor point as hint (fast) + hint = m_search_tree->closest_point(query); // pick closest neighbor point as hint (fast) else hint = m_data[0].reference_point(); // pick first primitive reference point as hint (slow) return closest_point(query,hint);