Use stack variable instead of pointer

This commit is contained in:
Ahmed Essam 2020-03-06 16:28:21 +02:00
parent 95c1af0224
commit 49465bbcb6
2 changed files with 10 additions and 12 deletions

View File

@ -633,9 +633,9 @@ public:
typename AABB_tree<Tr>::Self& AABB_tree<Tr>::operator=(Self&& tree) noexcept typename AABB_tree<Tr>::Self& AABB_tree<Tr>::operator=(Self&& tree) noexcept
{ {
m_traits = std::move(tree.traits); m_traits = std::move(tree.traits);
m_primitives = std::exchange(tree.m_primitives, {}); m_primitives = std::move(tree.m_primitives);
m_p_nodes = std::exchange(tree.m_p_nodes, {}); m_p_nodes = std::move(tree.m_p_nodes);
m_p_search_tree = std::exchange(tree.m_p_search_tree, nullptr); m_p_search_tree = std::move(tree.m_p_search_tree);
m_search_tree_constructed = std::exchange(tree.m_search_tree_constructed, false); m_search_tree_constructed = std::exchange(tree.m_search_tree_constructed, false);
m_default_search_tree_constructed = std::exchange(tree.m_default_search_tree_constructed, true); m_default_search_tree_constructed = std::exchange(tree.m_default_search_tree_constructed, true);
m_need_build = std::exchange(tree.m_need_build, false); m_need_build = std::exchange(tree.m_need_build, false);

View File

@ -13,8 +13,6 @@
#ifndef CGAL_AABB_SEARCH_TREE_H #ifndef CGAL_AABB_SEARCH_TREE_H
#define CGAL_AABB_SEARCH_TREE_H #define CGAL_AABB_SEARCH_TREE_H
#include <memory>
#include <CGAL/license/AABB_tree.h> #include <CGAL/license/AABB_tree.h>
@ -85,7 +83,7 @@ namespace CGAL
typedef typename CGAL::Orthogonal_k_neighbor_search<TreeTraits> Neighbor_search; typedef typename CGAL::Orthogonal_k_neighbor_search<TreeTraits> Neighbor_search;
typedef typename Neighbor_search::Tree Tree; typedef typename Neighbor_search::Tree Tree;
private: private:
std::unique_ptr<Tree> m_p_tree; Tree m_tree;
Point_and_primitive_id get_p_and_p(const Point_and_primitive_id& p) Point_and_primitive_id get_p_and_p(const Point_and_primitive_id& p)
@ -100,22 +98,22 @@ namespace CGAL
public: public:
template <class ConstPointIterator> template <class ConstPointIterator>
AABB_search_tree(ConstPointIterator begin, ConstPointIterator beyond) AABB_search_tree(ConstPointIterator begin, ConstPointIterator beyond)
: m_p_tree(nullptr) : m_tree{}
{ {
typedef typename Add_decorated_point<Traits, typename Traits::Primitive::Id>::Point_3 Decorated_point; typedef typename Add_decorated_point<Traits,typename Traits::Primitive::Id>::Point_3 Decorated_point;
std::vector<Decorated_point> points; std::vector<Decorated_point> points;
while(begin != beyond) { while(begin != beyond) {
Point_and_primitive_id pp = get_p_and_p(*begin); Point_and_primitive_id pp = get_p_and_p(*begin);
points.emplace_back(pp.first,pp.second); points.emplace_back(pp.first, pp.second);
++begin; ++begin;
} }
m_p_tree = std::make_unique<Tree>(points.begin(), points.end()); m_tree.insert(points.begin(), points.end());
m_p_tree->build(); m_tree.build();
} }
Point_and_primitive_id closest_point(const Point& query) const Point_and_primitive_id closest_point(const Point& query) const
{ {
Neighbor_search search(*m_p_tree, query, 1); Neighbor_search search(m_tree, query, 1);
return Point_and_primitive_id(static_cast<Point>(search.begin()->first), search.begin()->first.id()); return Point_and_primitive_id(static_cast<Point>(search.begin()->first), search.begin()->first.id());
} }
}; };