From 2258e7a810bdfb514018591d744c79fb94ce2bca Mon Sep 17 00:00:00 2001 From: Clement Jamin Date: Tue, 1 Apr 2014 16:01:21 +0200 Subject: [PATCH] Fix: use a pointer instead of a copy of Flat_orientation_d Note: the previous commit fixing this problem (using construct_flat_orientation_d_object()) was not compilable --- .../include/CGAL/Delaunay_triangulation.h | 12 +++++++----- Triangulation/include/CGAL/Triangulation.h | 19 +++++++++---------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/Triangulation/include/CGAL/Delaunay_triangulation.h b/Triangulation/include/CGAL/Delaunay_triangulation.h index d0f41201043..61e30dd8350 100644 --- a/Triangulation/include/CGAL/Delaunay_triangulation.h +++ b/Triangulation/include/CGAL/Delaunay_triangulation.h @@ -174,7 +174,7 @@ public: Delaunay_triangulation( int dim, - const std::pair &preset_flat_orientation, + const std::pair &preset_flat_orientation, const Geom_traits k = Geom_traits()) : Base(dim, preset_flat_orientation, k) { @@ -452,11 +452,13 @@ Delaunay_triangulation typedef typename Dark_triangulation::Facet Dark_facet; typedef typename Dark_triangulation::Vertex_handle Dark_v_handle; typedef typename Dark_triangulation::Full_cell_handle Dark_s_handle; - Dark_triangulation dark_side(maximal_dimension(), + + Dark_triangulation dark_side( + maximal_dimension(), flat_orientation_ ? - std::make_pair(current_dimension(), flat_orientation_.get()) - : std::make_pair(std::numeric_limits::max(), - geom_traits().construct_flat_orientation_d_object()) ); + std::make_pair(current_dimension(), &flat_orientation_.get()) + : std::make_pair(std::numeric_limits::max(), NULL) ); + Dark_s_handle dark_s; Dark_v_handle dark_v; typedef std::map Vertex_map; diff --git a/Triangulation/include/CGAL/Triangulation.h b/Triangulation/include/CGAL/Triangulation.h index 58ca9f0db95..d4bb7a65285 100644 --- a/Triangulation/include/CGAL/Triangulation.h +++ b/Triangulation/include/CGAL/Triangulation.h @@ -77,7 +77,10 @@ protected: void reset_flat_orientation() { if (current_dimension() == preset_flat_orientation_.first) - flat_orientation_ = preset_flat_orientation_.second; + { + CGAL_assertion(preset_flat_orientation_.second != NULL); + flat_orientation_ = *preset_flat_orientation_.second; + } else flat_orientation_ = boost::none; } @@ -146,7 +149,7 @@ protected: // DATA MEMBERS Vertex_handle infinity_; mutable std::vector orientations_; mutable boost::optional flat_orientation_; - std::pair preset_flat_orientation_; + std::pair preset_flat_orientation_; // for stochastic walk in the locate() function: mutable Random rng_; #ifdef CGAL_TRIANGULATION_STATISTICS @@ -190,9 +193,7 @@ public: , kernel_(k) , infinity_() , rng_((long)0) - , preset_flat_orientation_( - std::numeric_limits::max(), - geom_traits().construct_flat_orientation_d_object()) + , preset_flat_orientation_(std::numeric_limits::max(), NULL) #ifdef CGAL_TRIANGULATION_STATISTICS ,walk_size_(0) #endif @@ -201,8 +202,8 @@ public: } Triangulation( - int dim, - const std::pair &preset_flat_orientation, + int dim, + const std::pair &preset_flat_orientation, const Geom_traits k = Geom_traits()) : tds_(dim) , kernel_(k) @@ -221,9 +222,7 @@ public: , kernel_(t2.kernel_) , infinity_() , rng_(t2.rng_) - , preset_flat_orientation_( - std::numeric_limits::max(), - geom_traits().construct_flat_orientation_d_object()) + , preset_flat_orientation_(std::numeric_limits::max(), NULL) #ifdef CGAL_TRIANGULATION_STATISTICS ,walk_size_(t2.walk_size_) #endif