mirror of https://github.com/CGAL/cgal
Make orientations_ a local variable, for thread-safety
In small dimension, small_vector won't allocate, and in large dimension, orientations are more costly than a single allocation.
This commit is contained in:
parent
e6e1c8b557
commit
666808c2ea
|
|
@ -27,6 +27,7 @@
|
||||||
#include <CGAL/Default.h>
|
#include <CGAL/Default.h>
|
||||||
#include <CGAL/Random.h>
|
#include <CGAL/Random.h>
|
||||||
|
|
||||||
|
#include <boost/container/small_vector.hpp>
|
||||||
#include <boost/iterator/filter_iterator.hpp>
|
#include <boost/iterator/filter_iterator.hpp>
|
||||||
#include <CGAL/boost/iterator/transform_iterator.hpp>
|
#include <CGAL/boost/iterator/transform_iterator.hpp>
|
||||||
|
|
||||||
|
|
@ -187,7 +188,6 @@ protected: // DATA MEMBERS
|
||||||
Triangulation_ds tds_;
|
Triangulation_ds tds_;
|
||||||
const Geom_traits kernel_;
|
const Geom_traits kernel_;
|
||||||
Vertex_handle infinity_;
|
Vertex_handle infinity_;
|
||||||
mutable std::vector<Oriented_side> orientations_;
|
|
||||||
mutable boost::optional<Flat_orientation_d> flat_orientation_;
|
mutable boost::optional<Flat_orientation_d> flat_orientation_;
|
||||||
// The user can specify a Flat_orientation_d object to be used for
|
// The user can specify a Flat_orientation_d object to be used for
|
||||||
// orienting simplices of a specific dimension
|
// orienting simplices of a specific dimension
|
||||||
|
|
@ -317,8 +317,6 @@ public:
|
||||||
++infinity_;
|
++infinity_;
|
||||||
++inf2;
|
++inf2;
|
||||||
}
|
}
|
||||||
// A full_cell has at most 1 + maximal_dimension() facets:
|
|
||||||
orientations_.resize(1 + maximal_dimension());
|
|
||||||
// Our coaffine orientation predicates HAS state member variables
|
// Our coaffine orientation predicates HAS state member variables
|
||||||
reset_flat_orientation();
|
reset_flat_orientation();
|
||||||
}
|
}
|
||||||
|
|
@ -613,8 +611,6 @@ public:
|
||||||
{
|
{
|
||||||
tds_.clear();
|
tds_.clear();
|
||||||
infinity_ = tds().insert_increase_dimension();
|
infinity_ = tds().insert_increase_dimension();
|
||||||
// A full_cell has at most 1 + maximal_dimension() facets:
|
|
||||||
orientations_.resize(1 + maximal_dimension());
|
|
||||||
// Our coaffine orientation predicates HAS state member variables
|
// Our coaffine orientation predicates HAS state member variables
|
||||||
reset_flat_orientation();
|
reset_flat_orientation();
|
||||||
#ifdef CGAL_TRIANGULATION_STATISTICS
|
#ifdef CGAL_TRIANGULATION_STATISTICS
|
||||||
|
|
@ -1090,6 +1086,8 @@ Triangulation<TT, TDS>
|
||||||
// of one |orientation| predicate
|
// of one |orientation| predicate
|
||||||
Full_cell_handle previous = Full_cell_handle();
|
Full_cell_handle previous = Full_cell_handle();
|
||||||
bool full_cell_not_found = true;
|
bool full_cell_not_found = true;
|
||||||
|
// A full_cell has at most 1 + maximal_dimension() facets:
|
||||||
|
boost::container::small_vector<signed char, 8> orientations_ (1 + maximal_dimension());
|
||||||
while(full_cell_not_found) // we walk until we locate the query point |p|
|
while(full_cell_not_found) // we walk until we locate the query point |p|
|
||||||
{
|
{
|
||||||
#ifdef CGAL_TRIANGULATION_STATISTICS
|
#ifdef CGAL_TRIANGULATION_STATISTICS
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue