// Copyright (c) 2014 // INRIA Saclay-Ile de France (France) // // This file is part of CGAL (www.cgal.org) // // $URL: https://github.com/CGAL/cgal/blob/v5.2/NewKernel_d/include/CGAL/NewKernel_d/Kernel_2_interface.h $ // $Id: Kernel_2_interface.h 0779373 2020-03-26T13:31:46+01:00 Sébastien Loriot // SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial // // Author(s) : Marc Glisse #ifndef CGAL_KD_KERNEL_2_INTERFACE_H #define CGAL_KD_KERNEL_2_INTERFACE_H #include #include #include #include namespace CGAL { template struct Kernel_2_interface : public Base_ { typedef Base_ Base; typedef Kernel_2_interface Kernel; typedef typename Get_type::type RT; typedef typename Get_type::type FT; typedef typename Get_type::type Boolean; typedef typename Get_type::type Sign; typedef typename Get_type::type Comparison_result; typedef typename Get_type::type Orientation; typedef typename Get_type::type Oriented_side; typedef typename Get_type::type Bounded_side; typedef typename Get_type::type Angle; typedef typename Get_type::type Point_2; typedef typename Get_type::type Vector_2; typedef typename Get_type::type Segment_2; typedef std::tuple Triangle_2; // triangulation insists... template struct Help_2p_i { typedef typename Get_functor::type LT; typedef typename LT::result_type result_type; LT lt; Help_2p_i(Kernel const&k):lt(k){} result_type operator()(Point_2 const&a, Point_2 const&b) { return lt(a,b,i); } }; typedef Help_2p_i Less_x_2; typedef Help_2p_i Less_y_2; typedef Help_2p_i Compare_x_2; typedef Help_2p_i Compare_y_2; struct Compare_distance_2 { typedef typename Get_functor::type CD; typedef typename CD::result_type result_type; CD cd; Compare_distance_2(Kernel const&k):cd(k){} result_type operator()(Point_2 const&a, Point_2 const&b, Point_2 const&c) { return cd(a,b,c); } result_type operator()(Point_2 const&a, Point_2 const&b, Point_2 const&c, Point_2 const&d) { return cd(a,b,c,d); } }; struct Orientation_2 { typedef typename Get_functor::type O; typedef typename O::result_type result_type; O o; Orientation_2(Kernel const&k):o(k){} result_type operator()(Point_2 const&a, Point_2 const&b, Point_2 const&c) { //return o(a,b,c); Point_2 const* t[3]={&a,&b,&c}; return o(make_transforming_iterator(t+0),make_transforming_iterator(t+3)); } }; struct Side_of_oriented_circle_2 { typedef typename Get_functor::type SOS; typedef typename SOS::result_type result_type; SOS sos; Side_of_oriented_circle_2(Kernel const&k):sos(k){} result_type operator()(Point_2 const&a, Point_2 const&b, Point_2 const&c, Point_2 const&d) { //return sos(a,b,c,d); Point_2 const* t[4]={&a,&b,&c,&d}; return sos(make_transforming_iterator(t+0),make_transforming_iterator(t+4)); } }; Less_x_2 less_x_2_object()const{ return Less_x_2(*this); } Less_y_2 less_y_2_object()const{ return Less_y_2(*this); } Compare_x_2 compare_x_2_object()const{ return Compare_x_2(*this); } Compare_y_2 compare_y_2_object()const{ return Compare_y_2(*this); } Compare_distance_2 compare_distance_2_object()const{ return Compare_distance_2(*this); } Orientation_2 orientation_2_object()const{ return Orientation_2(*this); } Side_of_oriented_circle_2 side_of_oriented_circle_2_object()const{ return Side_of_oriented_circle_2(*this); } }; } #endif