From 0246431abdb3663bcac31d1bb5adb2a594377dc5 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 12 Apr 2021 09:08:36 +0100 Subject: [PATCH] Replace Compact_container with boost::container::deque --- Nef_3/include/CGAL/Nef_3/K3_tree.h | 31 ++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/Nef_3/include/CGAL/Nef_3/K3_tree.h b/Nef_3/include/CGAL/Nef_3/K3_tree.h index db4157c0702..3aedabef03a 100644 --- a/Nef_3/include/CGAL/Nef_3/K3_tree.h +++ b/Nef_3/include/CGAL/Nef_3/K3_tree.h @@ -22,7 +22,7 @@ #include #include #include -#include +#include #ifdef CGAL_NEF3_TRIANGULATE_FACETS #include @@ -289,10 +289,10 @@ typedef Smaller_than< Vertex_handle, int> Smaller_; - class Node : public Compact_container_base { + class Node { friend class K3_tree; public: - typedef typename Compact_container::iterator Node_handle; + typedef Node* Node_handle; Node( Node_handle p, Node_handle l, Node_handle r, Plane_3 pl, const Object_list& O) : parent_node(p), left_node(l), right_node(r), splitting_plane(pl), @@ -308,7 +308,7 @@ public: return (left_node == 0 && right_node == 0); } const Node_handle parent() const { return parent_node; } - const Node_handle left() const { return left_node; } + const Node_handle left() const { return left_node; } const Node_handle right() const { return right_node; } const Plane_3& plane() const { return splitting_plane; } const Object_list& objects() const { return object_list; } @@ -468,9 +468,8 @@ private: Object_list object_list; }; - typedef Compact_container Node_range; - typedef typename Node_range::iterator Node_iterator; - typedef Node_iterator Node_handle; + typedef boost::container::deque Node_range; + typedef Node* Node_handle; public: @@ -529,7 +528,7 @@ public: Self& operator++() { if( S.empty()) - node = Node_handle(); // end of the iterator + node = nullptr; // end of the iterator else { while( !S.empty()) { Node_handle n = S.front().first; @@ -777,7 +776,7 @@ private: Node_handle root; - Compact_container nodes; + boost::container::deque nodes; int max_depth; Bounding_box_3 bounding_box; @@ -996,7 +995,7 @@ typename Object_list::difference_type n_vertices = std::distance(objects.begin() void transform(const Aff_transformation_3& t) { // TODO: Bounding box must be updated/transformed, too - if(root != 0) + if(root != nullptr) root->transform(t); BBox_updater bbup; @@ -1138,7 +1137,8 @@ Node_handle build_kdtree(Object_list& O, Object_iterator v_end, CGAL_NEF_TRACEN( "build_kdtree: "< max_depth) - return nodes.insert(Node( parent, Node_handle(), Node_handle(), Plane_3(), O)); + nodes.push_back(Node( parent, nullptr, nullptr, Plane_3(), O)); + return &(nodes.back()); } else { CGAL_NEF_TRACEN("Sizes " << O1.size() << ", " << O2.size() << ", " << O.size()); CGAL_assertion( O1.size() <= O.size() && O2.size() <= O.size()); @@ -1193,9 +1194,11 @@ Node_handle build_kdtree(Object_list& O, Object_iterator v_end, non_efective_splits = 0; if( non_efective_splits > 2) { CGAL_NEF_TRACEN("build_kdtree: non efective splits reached maximum"); - return nodes.insert(Node( parent, Node_handle(), Node_handle(), Plane_3(), O)); + nodes.push_back(Node( parent, nullptr, nullptr, Plane_3(), O)); + return &(nodes.back()); } - Node_handle node = nodes.insert(Node( parent, Node_handle(), Node_handle(), partition_plane, Object_list())); + nodes.push_back(Node( parent, nullptr, nullptr, partition_plane, Object_list())); + Node_handle node = &(nodes.back()); node->left_node = build_kdtree( O1, O1.begin()+v_end1, depth + 1, node, non_efective_splits); node->right_node = build_kdtree( O2, O2.begin()+v_end2, depth + 1, node, non_efective_splits); return node;