From e0a34e1dc83a684c4152460560ae1af1c32a832b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 15 Oct 2012 07:39:24 +0000 Subject: [PATCH] adding a specialization for Sqrt_extension for NT_converter and its test --- .../CGAL/Sqrt_extension/Sqrt_extension_type.h | 43 +++++++++++++++++++ .../test/Number_types/Sqrt_extension.cpp | 18 +++++++- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/Number_types/include/CGAL/Sqrt_extension/Sqrt_extension_type.h b/Number_types/include/CGAL/Sqrt_extension/Sqrt_extension_type.h index e5c5ec41246..f4ed07f7742 100644 --- a/Number_types/include/CGAL/Sqrt_extension/Sqrt_extension_type.h +++ b/Number_types/include/CGAL/Sqrt_extension/Sqrt_extension_type.h @@ -40,6 +40,7 @@ #include #include #include +#include #define CGAL_int(T) typename First_if_different::Type @@ -672,6 +673,48 @@ Sqrt_extension square (const Sqrt_extension +struct NT_converter < Sqrt_extension , Sqrt_extension > + : public std::unary_function< NT1, NT2 > +{ + Sqrt_extension + operator()(const Sqrt_extension &a) const + { + if(!a.is_extended()) { + return Sqrt_extension(NT_converter()(a.a0())); + } else { + return Sqrt_extension + (NT_converter()(a.a0()), + NT_converter()(a.a1()), + NT_converter()(a.root())); + } + } +}; + +template +struct NT_converter < NT1 , Sqrt_extension > + : public std::unary_function< NT1, NT2 > +{ + Sqrt_extension + operator()(const NT1 &a) const + { + return Sqrt_extension(NT_converter()(a)); + } +}; + +//needed because it's a better match than the specialization +template +struct NT_converter < Sqrt_extension, Sqrt_extension > + : public std::unary_function< NT1, NT1 > +{ + const Sqrt_extension& + operator()(const Sqrt_extension &a) const + { + return a; + } +}; + // UNARY template Sqrt_extension operator + (const Sqrt_extension& p) { return p; } diff --git a/Number_types/test/Number_types/Sqrt_extension.cpp b/Number_types/test/Number_types/Sqrt_extension.cpp index e2a5fb1847b..52696fc389c 100644 --- a/Number_types/test/Number_types/Sqrt_extension.cpp +++ b/Number_types/test/Number_types/Sqrt_extension.cpp @@ -726,7 +726,20 @@ void sqrt_extension_test(){ scalar_factor_traits_test(); test_algebraic_extension_traits(); - test_get_arithmetic_kernel(); + test_get_arithmetic_kernel(); +} + +#include +void test_nt_converter() +{ + typedef CGAL::internal::Exact_type_selector::Type NT; + typedef CGAL::Sqrt_extension Source; + typedef CGAL::Sqrt_extension Target; + + CGAL::NT_converter converter; + + Source s; + Target t=converter(s); } int main(){ @@ -739,7 +752,8 @@ int main(){ sqrt_extension_test(); sqrt_extension_test(); #endif // CGAL_HAS_CORE_ARITHMETIC_KERNEL - return 0; + test_nt_converter(); + return 0; }