enable exact serialization of triangulations with EPECK

This commit is contained in:
Sébastien Loriot 2023-06-13 14:30:01 +02:00
parent ddb405a2c2
commit 2251c438fa
7 changed files with 26 additions and 5 deletions

View File

@ -77,7 +77,7 @@ template <typename GT, typename Vb>
std::ostream&
operator<<(std::ostream &os, const Convex_hull_vertex_base_2<GT, Vb>& v)
{
return os << static_cast<const Vb&>(v) << v.point();
return os << static_cast<const Vb&>(v) << IO::serialize(v.point());
}
} //namespace CGAL

View File

@ -698,6 +698,25 @@ inline const char* mode_name( IO::Mode m )
return names[m];
}
namespace internal {
template <class P> constexpr auto has_exact(int) -> decltype(exact(P()), bool()) { return true; }
template <class P> constexpr bool has_exact(...) { return false; }
}
template <class P>
auto
serialize(const P& p) {
if constexpr (internal::has_exact<P>(0)) {
return exact(p);
} else {
return p;
}
}
} // IO namespace
#ifndef CGAL_NO_DEPRECATED_CODE

View File

@ -81,7 +81,7 @@ operator<<(std::ostream &os,
const Regular_triangulation_vertex_base_2<GT, Vb> &v)
// non combinatorial information. Default = point
{
return os << static_cast<const Vb&>(v) << v.point();
return os << static_cast<const Vb&>(v) << IO::serialize(v.point());
}
} //namespace CGAL

View File

@ -109,7 +109,7 @@ std::ostream&
operator<<(std::ostream &os, const Triangulation_vertex_base_2<GT, Vb> &v)
// non combinatorial information. Default = point
{
return os << static_cast<const Vb&>(v) << v.point();
return os << static_cast<const Vb&>(v) << IO::serialize(v.point());
}
#ifndef CGAL_NO_DEPRECATED_CODE

View File

@ -75,7 +75,7 @@ std::ostream&
operator<<(std::ostream &os, const Regular_triangulation_vertex_base_3<GT, DSVb> &v)
// non combinatorial information. Default = point
{
return os << static_cast<const DSVb&>(v) << v.point();
return os << static_cast<const DSVb&>(v) << IO::serialize(v.point());
}
} //namespace CGAL

View File

@ -61,6 +61,7 @@ private:
Point _p;
};
template < class GT, class DSVb >
std::istream&
operator>>(std::istream &is, Triangulation_vertex_base_3<GT, DSVb> &v)
@ -74,7 +75,7 @@ std::ostream&
operator<<(std::ostream &os, const Triangulation_vertex_base_3<GT, DSVb> &v)
// non combinatorial information. Default = point
{
return os << static_cast<const DSVb&>(v) << v.point();
return os << static_cast<const DSVb&>(v) << IO::serialize(v.point());
}
} //namespace CGAL

View File

@ -28,6 +28,7 @@ create_single_source_cgal_program("test_segment_simplex_traverser_3.cpp" )
create_single_source_cgal_program("test_static_filters.cpp")
create_single_source_cgal_program("test_triangulation_3.cpp")
create_single_source_cgal_program("test_io_triangulation_3.cpp")
create_single_source_cgal_program("test_triangulation_serialization_3.cpp")
if(TARGET CGAL::TBB_support)
message(STATUS "Found TBB")