1 // Copyright (c) 2011 Tel-Aviv University (Israel), INRIA Sophia-Antipolis (France).
2 // All rights reserved.
3 //
4 // This file is part of CGAL (www.cgal.org).
5 //
6 // $URL: https://github.com/CGAL/cgal/blob/v5.3/Arrangement_on_surface_2/include/CGAL/Arr_rat_arc/Rational_function_pair.h $
7 // $Id: Rational_function_pair.h 0779373 2020-03-26T13:31:46+01:00 Sébastien Loriot
8 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
9 //
10 // Author(s)     : Oren Salzman <orenzalz@post.tau.ac.il >
11 //                 Michael Hemmer <Michael.Hemmer@sophia.inria.fr>
12 
13 #ifndef CGAL_RATIONAL_FUNCTION_ORDERED_PAIR_H
14 #define CGAL_RATIONAL_FUNCTION_ORDERED_PAIR_H
15 
16 #include <CGAL/license/Arrangement_on_surface_2.h>
17 
18 
19 
20 #include <CGAL/Arr_rat_arc/Base_rational_arc_ds_1.h>
21 #include <CGAL/Arr_rat_arc/Rational_function.h>
22 #include <CGAL/Arr_rat_arc/Rational_function_canonicalized_pair.h>
23 
24 namespace CGAL {
25 namespace Arr_rational_arc {
26 
27 template <typename AlgebraicKernel_d_1 >
28 class Rational_function_pair:
29     public Base_rational_arc_ds_1<AlgebraicKernel_d_1>
30 {
31 public:
32   typedef AlgebraicKernel_d_1                         Algebraic_kernel_d_1;
33   typedef Base_rational_arc_ds_1<Algebraic_kernel_d_1> Base;
34   typedef CGAL::Arr_rational_arc::Rational_function_canonicalized_pair<Algebraic_kernel_d_1>
35     Rational_function_canonicalized_pair;
36   typedef CGAL::Arr_rational_arc::Rational_function<Algebraic_kernel_d_1>
37                                                       Rational_function;
38 
39   typedef typename Base::Polynomial_1                 Polynomial_1;
40   typedef typename Base::Algebraic_real_1             Algebraic_real_1;
41   typedef typename Base::Algebraic_vector             Algebraic_vector;
42   typedef typename Base::Multiplicity                 Multiplicity;
43   typedef typename Base::Multiplicity_vector          Multiplicity_vector;
44   typedef typename Base::Root_multiplicity_vector     Root_multiplicity_vector;
45 
46 public:
47   Rational_function_pair(const Rational_function_canonicalized_pair& rat_pair,
48                          bool is_opposite = false) :
_rat_pair(rat_pair)49     _rat_pair(rat_pair), _is_opposite(is_opposite)
50   {}
51 
52   Comparison_result compare_f_g_at(const Algebraic_real_1& x ,
53                                    CGAL::Sign epsilon = CGAL::ZERO)
54   {
55     Comparison_result cr =  _rat_pair.compare_f_g_at(x,epsilon);
56     return (_is_opposite) ? -cr : cr ;
57   }
58 
compare_f_g_at(Arr_parameter_space boundary)59   Comparison_result compare_f_g_at(Arr_parameter_space boundary)
60   {
61     Comparison_result cr =  _rat_pair.compare_f_g_at(boundary);
62     return (_is_opposite) ? -cr : cr ;
63   }
64 
is_intersecting_in_range(const Arr_parameter_space left_parameter_space,const Algebraic_real_1 left,const Arr_parameter_space right_parameter_space,const Algebraic_real_1 right)65   bool is_intersecting_in_range(const Arr_parameter_space left_parameter_space,
66                                 const Algebraic_real_1 left,
67                                 const Arr_parameter_space right_parameter_space,
68                                 const Algebraic_real_1 right)
69   {
70     return _rat_pair.is_intersecting_in_range(left_parameter_space, left,
71                                               right_parameter_space, right);
72   }
73 
roots()74   const Algebraic_vector & roots() const
75   {
76     return _rat_pair.roots();
77   }
78 
multiplicities()79   const Multiplicity_vector & multiplicities() const
80   {
81     return _rat_pair.multiplicities();
82   }
83 
84 private:
85   const Rational_function_canonicalized_pair& _rat_pair;
86   bool                   _is_opposite;
87 }; // Rational_function_pair
88 
89 
90 }   //namespace Arr_rational_arc
91 }   //namespace CGAL {
92 
93 #endif //CGAL_RATIONAL_FUNCTION_ORDERED_PAIR_H
94