This commit is contained in:
Andreas Fabri 2022-03-11 09:12:17 +00:00
parent 6e4483a7d0
commit 04fa75eb84
3 changed files with 42 additions and 106 deletions

View File

@ -799,7 +799,7 @@ struct Approx_converter
template < typename T > template < typename T >
decltype(auto) decltype(auto)
operator()(const T&t) const operator()(const T&t) const
{ return t.approx(); } { return approx(t); }
const Null_vector& const Null_vector&
operator()(const Null_vector& n) const operator()(const Null_vector& n) const
@ -824,7 +824,7 @@ struct Exact_converter
template < typename T > template < typename T >
decltype(auto) decltype(auto)
operator()(const T&t) const operator()(const T&t) const
{ return t.exact(); } { return exact(t); }
const Null_vector& const Null_vector&
operator()(const Null_vector& n) const operator()(const Null_vector& n) const

View File

@ -28,9 +28,7 @@ public:
result_type operator()(const A1& a1) const result_type operator()(const A1& a1) const
{ {
CGAL::Epic_converter<AK> convert; CGAL::Epic_converter<AK> convert;
typedef typename Kernel_traits<A1>::type EK; auto aa1 = convert(approx(a1));
typedef typename Type_mapper<A1,EK,Exact_predicates_inexact_constructions_kernel>::type T1;
std::pair<T1,bool> aa1 = convert(a1.approx());
if(! aa1.second){ if(! aa1.second){
return fp(a1); return fp(a1);
} }
@ -42,9 +40,7 @@ public:
result_type operator()(const A1& a1, const Null_vector& v) const result_type operator()(const A1& a1, const Null_vector& v) const
{ {
CGAL::Epic_converter<AK> convert; CGAL::Epic_converter<AK> convert;
typedef typename Kernel_traits<A1>::type EK; auto aa1 = convert(approx(a1));
typedef typename Type_mapper<A1,EK,Exact_predicates_inexact_constructions_kernel>::type T1;
std::pair<T1,bool> aa1 = convert(a1.approx());
if(! aa1.second){ if(! aa1.second){
return fp(a1, v); return fp(a1, v);
} }
@ -56,14 +52,11 @@ public:
result_type operator()(const A1& a1, const A2& a2) const result_type operator()(const A1& a1, const A2& a2) const
{ {
CGAL::Epic_converter<AK> convert; CGAL::Epic_converter<AK> convert;
typedef typename Kernel_traits<A1>::type EK; auto aa1 = convert(approx(a1));
typedef typename Type_mapper<A1,EK, Exact_predicates_inexact_constructions_kernel>::type T1;
std::pair<T1,bool> aa1 = convert(approx(a1));
if(! aa1.second){ if(! aa1.second){
return fp(a1, a2); return fp(a1, a2);
} }
typedef typename Type_mapper<A2,EK, Exact_predicates_inexact_constructions_kernel>::type T2; auto aa2 = convert(approx(a2));
std::pair<T2,bool> aa2 = convert(approx(a2));
if(! aa2.second){ if(! aa2.second){
return fp(a1, a2); return fp(a1, a2);
} }
@ -76,9 +69,7 @@ public:
result_type operator()(const Bbox_2& bb, const A2& a2) const result_type operator()(const Bbox_2& bb, const A2& a2) const
{ {
CGAL::Epic_converter<AK> convert; CGAL::Epic_converter<AK> convert;
typedef typename Kernel_traits<A2>::type EK; auto aa2 = convert(approx(a2));
typedef typename Type_mapper<A2,EK, Exact_predicates_inexact_constructions_kernel>::type T2;
std::pair<T2,bool> aa2 = convert(approx(a2));
if(! aa2.second){ if(! aa2.second){
return fp(bb, a2); return fp(bb, a2);
} }
@ -89,9 +80,7 @@ public:
result_type operator()(const Bbox_3& bb, const A2& a2) const result_type operator()(const Bbox_3& bb, const A2& a2) const
{ {
CGAL::Epic_converter<AK> convert; CGAL::Epic_converter<AK> convert;
typedef typename Kernel_traits<A2>::type EK; auto aa2 = convert(approx(a2));
typedef typename Type_mapper<A2,EK, Exact_predicates_inexact_constructions_kernel>::type T2;
std::pair<T2,bool> aa2 = convert(approx(a2));
if(! aa2.second){ if(! aa2.second){
return fp(bb, a2); return fp(bb, a2);
} }
@ -102,19 +91,15 @@ public:
result_type operator()(const A1& a1, const A2& a2, const A3& a3) const result_type operator()(const A1& a1, const A2& a2, const A3& a3) const
{ {
CGAL::Epic_converter<AK> convert; CGAL::Epic_converter<AK> convert;
typedef typename Kernel_traits<A1>::type EK; auto aa1 = convert(approx(a1));
typedef typename Type_mapper<A1,EK, Exact_predicates_inexact_constructions_kernel>::type T1;
std::pair<T1,bool> aa1 = convert(a1.approx());
if(! aa1.second){ if(! aa1.second){
return fp(a1, a2, a3); return fp(a1, a2, a3);
} }
typedef typename Type_mapper<A2, EK, Exact_predicates_inexact_constructions_kernel>::type T2; auto aa2 = convert(approx(a2));
std::pair<T2,bool> aa2 = convert(a2.approx());
if(! aa2.second){ if(! aa2.second){
return fp(a1, a2, a3); return fp(a1, a2, a3);
} }
typedef typename Type_mapper<A3,EK, Exact_predicates_inexact_constructions_kernel>::type T3; auto aa3 = convert(approx(a3));
std::pair<T3,bool> aa3 = convert(a3.approx());
if(! aa3.second){ if(! aa3.second){
return fp(a1, a2, a3); return fp(a1, a2, a3);
} }
@ -126,30 +111,22 @@ public:
result_type operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4) const result_type operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4) const
{ {
CGAL::Epic_converter<AK> convert; CGAL::Epic_converter<AK> convert;
typedef typename Kernel_traits<A1>::type EK1; auto aa1 = convert(approx(a1));
typedef typename Type_mapper<A1,EK1,Exact_predicates_inexact_constructions_kernel>::type T1;
std::pair<T1,bool> aa1 = convert(a1.approx());
if(! aa1.second){ if(! aa1.second){
return fp(a1, a2, a3, a4); return fp(a1, a2, a3, a4);
} }
typedef typename Kernel_traits<A2>::type EK2; auto aa2 = convert(approx(a2));
typedef typename Type_mapper<A2,EK2,Exact_predicates_inexact_constructions_kernel>::type T2;
std::pair<T2,bool> aa2 = convert(a2.approx());
if(! aa2.second){ if(! aa2.second){
return fp(a1, a2, a3, a4); return fp(a1, a2, a3, a4);
} }
typedef typename Kernel_traits<A3>::type EK3; auto aa3 = convert(approx(a3));
typedef typename Type_mapper<A3,EK3,Exact_predicates_inexact_constructions_kernel>::type T3;
std::pair<T3,bool> aa3 = convert(a3.approx());
if(! aa3.second){ if(! aa3.second){
return fp(a1, a2, a3, a4); return fp(a1, a2, a3, a4);
} }
typedef typename Kernel_traits<A4>::type EK4; auto aa4 = convert(approx(a4));
typedef typename Type_mapper<A4,EK4,Exact_predicates_inexact_constructions_kernel>::type T4;
std::pair<T4,bool> aa4 = convert(a4.approx());
if(! aa4.second){ if(! aa4.second){
return fp(a1, a2, a3, a4); return fp(a1, a2, a3, a4);
} }
@ -160,29 +137,23 @@ public:
result_type operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5) const result_type operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5) const
{ {
CGAL::Epic_converter<AK> convert; CGAL::Epic_converter<AK> convert;
typedef typename Kernel_traits<A1>::type EK; auto aa1 = convert(approx(a1));
typedef typename Type_mapper<A1,EK,Exact_predicates_inexact_constructions_kernel>::type T1;
std::pair<T1,bool> aa1 = convert(a1.approx());
if(! aa1.second){ if(! aa1.second){
return fp(a1, a2, a3, a4, a5); return fp(a1, a2, a3, a4, a5);
} }
typedef typename Type_mapper<A2,EK,Exact_predicates_inexact_constructions_kernel>::type T2; auto aa2 = convert(approx(a2));
std::pair<T2,bool> aa2 = convert(a2.approx());
if(! aa2.second){ if(! aa2.second){
return fp(a1, a2, a3, a4, a5); return fp(a1, a2, a3, a4, a5);
} }
typedef typename Type_mapper<A3,EK,Exact_predicates_inexact_constructions_kernel>::type T3; auto aa3 = convert(approx(a3));
std::pair<T3,bool> aa3 = convert(a3.approx());
if(! aa3.second){ if(! aa3.second){
return fp(a1, a2, a3, a4, a5); return fp(a1, a2, a3, a4, a5);
} }
typedef typename Type_mapper<A4,EK,Exact_predicates_inexact_constructions_kernel>::type T4; auto aa4 = convert(approx(a4));
std::pair<T4,bool> aa4 = convert(a4.approx());
if(! aa4.second){ if(! aa4.second){
return fp(a1, a2, a3, a4, a5); return fp(a1, a2, a3, a4, a5);
} }
typedef typename Type_mapper<A5,EK,Exact_predicates_inexact_constructions_kernel>::type T5; auto aa5 = convert(approx(a5));
std::pair<T5,bool> aa5 = convert(a5.approx());
if(! aa5.second){ if(! aa5.second){
return fp(a1, a2, a3, a4, a5); return fp(a1, a2, a3, a4, a5);
} }
@ -193,34 +164,27 @@ public:
result_type operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6) const result_type operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6) const
{ {
CGAL::Epic_converter<AK> convert; CGAL::Epic_converter<AK> convert;
typedef typename Kernel_traits<A1>::type EK; auto aa1 = convert(approx(a1));
typedef typename Type_mapper<A1,EK,Exact_predicates_inexact_constructions_kernel>::type T1;
std::pair<T1,bool> aa1 = convert(a1.approx());
if(! aa1.second){ if(! aa1.second){
return fp(a1, a2, a3, a4, a5, a6); return fp(a1, a2, a3, a4, a5, a6);
} }
typedef typename Type_mapper<A2,EK,Exact_predicates_inexact_constructions_kernel>::type T2; auto aa2 = convert(approx(a2));
std::pair<T2,bool> aa2 = convert(a2.approx());
if(! aa2.second){ if(! aa2.second){
return fp(a1, a2, a3, a4, a5, a6); return fp(a1, a2, a3, a4, a5, a6);
} }
typedef typename Type_mapper<A3,EK,Exact_predicates_inexact_constructions_kernel>::type T3; auto aa3 = convert(approx(a3));
std::pair<T3,bool> aa3 = convert(a3.approx());
if(! aa3.second){ if(! aa3.second){
return fp(a1, a2, a3, a4, a5, a6); return fp(a1, a2, a3, a4, a5, a6);
} }
typedef typename Type_mapper<A4,EK,Exact_predicates_inexact_constructions_kernel>::type T4; auto aa4 = convert(approx(a4));
std::pair<T4,bool> aa4 = convert(a4.approx());
if(! aa4.second){ if(! aa4.second){
return fp(a1, a2, a3, a4, a5, a6); return fp(a1, a2, a3, a4, a5, a6);
} }
typedef typename Type_mapper<A5,EK,Exact_predicates_inexact_constructions_kernel>::type T5; auto aa5 = convert(approx(a5));
std::pair<T5,bool> aa5 = convert(a5.approx());
if(! aa5.second){ if(! aa5.second){
return fp(a1, a2, a3, a4, a5, a6); return fp(a1, a2, a3, a4, a5, a6);
} }
typedef typename Type_mapper<A6,EK,Exact_predicates_inexact_constructions_kernel>::type T6; auto aa6 = convert(approx(a6));
std::pair<T6,bool> aa6 = convert(a6.approx());
if(! aa6.second){ if(! aa6.second){
return fp(a1, a2, a3, a4, a5, a6); return fp(a1, a2, a3, a4, a5, a6);
} }
@ -231,39 +195,31 @@ public:
result_type operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6, const A6& a7) const result_type operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6, const A6& a7) const
{ {
CGAL::Epic_converter<AK> convert; CGAL::Epic_converter<AK> convert;
typedef typename Kernel_traits<A1>::type EK; auto aa1 = convert(approx(a1));
typedef typename Type_mapper<A1,EK,Exact_predicates_inexact_constructions_kernel>::type T1;
std::pair<T1,bool> aa1 = convert(a1.approx());
if(! aa1.second){ if(! aa1.second){
return fp(a1, a2, a3, a4, a5, a6, a7); return fp(a1, a2, a3, a4, a5, a6, a7);
} }
typedef typename Type_mapper<A2,EK,Exact_predicates_inexact_constructions_kernel>::type T2; auto aa2 = convert(approx(a2));
std::pair<T2,bool> aa2 = convert(a2.approx());
if(! aa2.second){ if(! aa2.second){
return fp(a1, a2, a3, a4, a5, a6, a7); return fp(a1, a2, a3, a4, a5, a6, a7);
} }
typedef typename Type_mapper<A3,EK,Exact_predicates_inexact_constructions_kernel>::type T3; auto aa3 = convert(approx(a3));
std::pair<T3,bool> aa3 = convert(a3.approx());
if(! aa3.second){ if(! aa3.second){
return fp(a1, a2, a3, a4, a5, a6, a7); return fp(a1, a2, a3, a4, a5, a6, a7);
} }
typedef typename Type_mapper<A4,EK,Exact_predicates_inexact_constructions_kernel>::type T4; auto aa4 = convert(approx(a4));
std::pair<T4,bool> aa4 = convert(a4.approx());
if(! aa4.second){ if(! aa4.second){
return fp(a1, a2, a3, a4, a5, a6, a7); return fp(a1, a2, a3, a4, a5, a6, a7);
} }
typedef typename Type_mapper<A5,EK,Exact_predicates_inexact_constructions_kernel>::type T5; auto aa5 = convert(approx(a5));
std::pair<T5,bool> aa5 = convert(a5.approx());
if(! aa5.second){ if(! aa5.second){
return fp(a1, a2, a3, a4, a5, a6, a7); return fp(a1, a2, a3, a4, a5, a6, a7);
} }
typedef typename Type_mapper<A6,EK,Exact_predicates_inexact_constructions_kernel>::type T6; auto aa6 = convert(approx(a6));
std::pair<T6,bool> aa6 = convert(a6.approx());
if(! aa6.second){ if(! aa6.second){
return fp(a1, a2, a3, a4, a5, a6, a7); return fp(a1, a2, a3, a4, a5, a6, a7);
} }
typedef typename Type_mapper<A7,EK,Exact_predicates_inexact_constructions_kernel>::type T7; auto aa7 = convert(approx(a7));
std::pair<T7,bool> aa7 = convert(a7.approx());
if(! aa7.second){ if(! aa7.second){
return fp(a1, a2, a3, a4, a5, a6, a7); return fp(a1, a2, a3, a4, a5, a6, a7);
} }
@ -275,44 +231,35 @@ public:
result_type operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6, const A7& a7, const A8& a8) const result_type operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6, const A7& a7, const A8& a8) const
{ {
CGAL::Epic_converter<AK> convert; CGAL::Epic_converter<AK> convert;
typedef typename Kernel_traits<A1>::type EK; auto aa1 = convert(approx(a1));
typedef typename Type_mapper<A1,EK,Exact_predicates_inexact_constructions_kernel>::type T1;
std::pair<T1,bool> aa1 = convert(a1.approx());
if(! aa1.second){ if(! aa1.second){
return fp(a1, a2, a3, a4, a5, a6, a7, a8); return fp(a1, a2, a3, a4, a5, a6, a7, a8);
} }
typedef typename Type_mapper<A2,EK,Exact_predicates_inexact_constructions_kernel>::type T2; auto aa2 = convert(approx(a2));
std::pair<T2,bool> aa2 = convert(a2.approx());
if(! aa2.second){ if(! aa2.second){
return fp(a1, a2, a3, a4, a5, a6, a7, a8); return fp(a1, a2, a3, a4, a5, a6, a7, a8);
} }
typedef typename Type_mapper<A3,EK,Exact_predicates_inexact_constructions_kernel>::type T3; auto aa3 = convert(approx(a3));
std::pair<T3,bool> aa3 = convert(a3.approx());
if(! aa3.second){ if(! aa3.second){
return fp(a1, a2, a3, a4, a5, a6, a7, a8); return fp(a1, a2, a3, a4, a5, a6, a7, a8);
} }
typedef typename Type_mapper<A4,EK,Exact_predicates_inexact_constructions_kernel>::type T4; auto aa4 = convert(approx(a4));
std::pair<T4,bool> aa4 = convert(a4.approx());
if(! aa4.second){ if(! aa4.second){
return fp(a1, a2, a3, a4, a5, a6, a7, a8); return fp(a1, a2, a3, a4, a5, a6, a7, a8);
} }
typedef typename Type_mapper<A5,EK,Exact_predicates_inexact_constructions_kernel>::type T5; auto aa5 = convert(approx(a5));
std::pair<T5,bool> aa5 = convert(a5.approx());
if(! aa5.second){ if(! aa5.second){
return fp(a1, a2, a3, a4, a5, a6, a7, a8); return fp(a1, a2, a3, a4, a5, a6, a7, a8);
} }
typedef typename Type_mapper<A6,EK,Exact_predicates_inexact_constructions_kernel>::type T6; auto aa6 = convert(approx(a6));
std::pair<T6,bool> aa6 = convert(a6.approx());
if(! aa6.second){ if(! aa6.second){
return fp(a1, a2, a3, a5, a5, a6, a7, a8); return fp(a1, a2, a3, a5, a5, a6, a7, a8);
} }
typedef typename Type_mapper<A7,EK,Exact_predicates_inexact_constructions_kernel>::type T7; auto aa7 = convert(approx(a7));
std::pair<T7,bool> aa7 = convert(a7.approx());
if(! aa7.second){ if(! aa7.second){
return fp(a1, a2, a3, a5, a5, a6, a7, a8); return fp(a1, a2, a3, a5, a5, a6, a7, a8);
} }
typedef typename Type_mapper<A8,EK,Exact_predicates_inexact_constructions_kernel>::type T8; auto aa8 = convert(approx(a8));
std::pair<T8,bool> aa8 = convert(a8.approx());
if(! aa8.second){ if(! aa8.second){
return fp(a1, a2, a3, a4, a5, a6, a7, a8); return fp(a1, a2, a3, a4, a5, a6, a7, a8);
} }

View File

@ -23,18 +23,7 @@
namespace CGAL { namespace CGAL {
class Origin class Origin
{ {};
public:
const Origin& approx() const
{
return *this;
}
const Origin& exact() const
{
return *this;
}
};
class Null_vector class Null_vector
{}; {};