mirror of https://github.com/CGAL/cgal
Merge remote-tracking branch 'lrineau/CGAL-followup_PR_8170-lrineau' into Triangulation_3-CDT_3-lrineau
This commit is contained in:
commit
ace867c084
|
|
@ -346,12 +346,26 @@ protected:
|
|||
{
|
||||
// with constraint hierarchy
|
||||
|
||||
for(typename Tr::Subconstraint_iterator it = tr.subconstraints_begin();
|
||||
it != tr.subconstraints_end(); ++it)
|
||||
{
|
||||
const Vertex_handle& v1 = it->first.first;
|
||||
const Vertex_handle& v2 = it->first.second;
|
||||
// create a vector of pairs of vertex handles, from the subconstraints
|
||||
// and sort it to ensure the determinism
|
||||
std::vector<std::array<Vertex_handle, 2>> subconstraints_vector(tr.number_of_subconstraints());
|
||||
std::transform(tr.subconstraints_begin(), tr.subconstraints_end(), subconstraints_vector.begin(),
|
||||
[](const auto& sc) {
|
||||
return std::array<Vertex_handle, 2>{sc.first.first, sc.first.second};
|
||||
});
|
||||
|
||||
auto comp_vh = [&] (Vertex_handle va, Vertex_handle vb) {
|
||||
return tr.compare_xy(va->point(), vb->point()) == SMALLER;
|
||||
};
|
||||
auto comp_pair_vh = [&] (const auto& e1, const auto& e2) {
|
||||
return comp_vh(e1[0], e2[0]) ||
|
||||
(!comp_vh(e2[0], e1[0]) && comp_vh(e1[1], e2[1]));
|
||||
};
|
||||
|
||||
std::sort(subconstraints_vector.begin(), subconstraints_vector.end(), comp_pair_vh);
|
||||
|
||||
for(const auto& [v1, v2] : subconstraints_vector)
|
||||
{
|
||||
if(!is_locally_conform(tr, v1, v2) ){
|
||||
add_constrained_edge_to_be_conformed(v1, v2);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,14 +46,13 @@ save_binary_file(std::ostream& os,
|
|||
, bool binary = true)
|
||||
#endif
|
||||
{
|
||||
typedef typename C3T3::Triangulation::Geom_traits::FT FT;
|
||||
if(binary) os << "binary ";
|
||||
os << "CGAL c3t3 " << CGAL::Get_io_signature<C3T3>()() << "\n";
|
||||
if(binary) {
|
||||
CGAL::IO::set_binary_mode(os);
|
||||
} else {
|
||||
CGAL::IO::set_ascii_mode(os);
|
||||
os.precision(std::numeric_limits<FT>::digits10+2);
|
||||
os.precision(std::numeric_limits<double>::max_digits10);
|
||||
}
|
||||
return !!(os << c3t3);
|
||||
// call operator!() twice, because operator bool() is C++11
|
||||
|
|
|
|||
|
|
@ -21,6 +21,15 @@
|
|||
#include <map>
|
||||
#include <set>
|
||||
#include <list>
|
||||
|
||||
#include <boost/version.hpp>
|
||||
#if BOOST_VERSION >= 108100
|
||||
# include <boost/unordered/unordered_flat_map.hpp>
|
||||
# define CGAL_USE_BOOST_UNORDERED 1
|
||||
#else // BOOST before 1.81.0
|
||||
# include <unordered_map>
|
||||
#endif
|
||||
|
||||
#include <CGAL/Skiplist.h>
|
||||
#include <CGAL/assertions.h>
|
||||
|
||||
|
|
@ -134,24 +143,6 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
class Pair_compare {
|
||||
Compare comp;
|
||||
|
||||
public:
|
||||
Pair_compare(const Compare& comp) : comp(comp) {}
|
||||
|
||||
bool operator()(const Edge& e1, const Edge& e2) const {
|
||||
if(comp(e1.first, e2.first)) {
|
||||
return true;
|
||||
} else if((! comp(e2.first, e1.first)) && // !less(e1,e2) && !less(e2,e1) == equal
|
||||
comp(e1.second, e2.second)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class Context {
|
||||
friend class Polyline_constraint_hierarchy_2<T,Compare,Point>;
|
||||
private:
|
||||
|
|
@ -171,8 +162,11 @@ public:
|
|||
typedef typename Context_list::iterator Context_iterator;
|
||||
|
||||
typedef std::set<Constraint_id> Constraint_set;
|
||||
typedef std::map<Edge, Context_list*,
|
||||
Pair_compare> Sc_to_c_map;
|
||||
#if CGAL_USE_BOOST_UNORDERED
|
||||
typedef boost::unordered_flat_map<Edge, Context_list*, boost::hash<Edge>> Sc_to_c_map;
|
||||
#else
|
||||
typedef std::unordered_map<Edge, Context_list*, boost::hash<Edge>> Sc_to_c_map;
|
||||
#endif
|
||||
typedef typename Constraint_set::iterator C_iterator;
|
||||
typedef typename Sc_to_c_map::const_iterator Sc_iterator;
|
||||
typedef Sc_iterator Subconstraint_iterator;
|
||||
|
|
@ -186,7 +180,7 @@ private:
|
|||
public:
|
||||
Polyline_constraint_hierarchy_2(const Compare& comp)
|
||||
: comp(comp)
|
||||
, sc_to_c_map(Pair_compare(comp))
|
||||
, sc_to_c_map()
|
||||
{ }
|
||||
Polyline_constraint_hierarchy_2(const Polyline_constraint_hierarchy_2& ch);
|
||||
Polyline_constraint_hierarchy_2(Polyline_constraint_hierarchy_2&&) = default;
|
||||
|
|
@ -290,7 +284,7 @@ template <class T, class Compare, class Point>
|
|||
Polyline_constraint_hierarchy_2<T,Compare,Point>::
|
||||
Polyline_constraint_hierarchy_2(const Polyline_constraint_hierarchy_2& ch)
|
||||
: comp(ch.comp)
|
||||
, sc_to_c_map(Pair_compare(comp))
|
||||
, sc_to_c_map()
|
||||
{
|
||||
copy(ch);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue