1 // Copyright (c) 2019 GeometryFactory (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/Convex_hull_2/include/CGAL/Convex_hull_traits_adapter_2.h $ 7 // $Id: Convex_hull_traits_adapter_2.h 0779373 2020-03-26T13:31:46+01:00 Sébastien Loriot 8 // SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial 9 // 10 // Author(s) : Sebastien Loriot 11 12 13 #ifndef CGAL_CONVEX_HULL_TRAITS_ADAPTER_2_H 14 #define CGAL_CONVEX_HULL_TRAITS_ADAPTER_2_H 15 16 #include <CGAL/disable_warnings.h> 17 18 #include <boost/call_traits.hpp> 19 20 #include <CGAL/property_map.h> 21 22 23 namespace CGAL{ 24 25 26 template<class Base_traits,class PointPropertyMap> 27 class Convex_hull_traits_adapter_2:public Base_traits{ 28 PointPropertyMap ppmap_; 29 public: Base_traits(base)30 Convex_hull_traits_adapter_2(Base_traits base=Base_traits()):Base_traits(base){} 31 32 Convex_hull_traits_adapter_2(const PointPropertyMap& ppmap,Base_traits base=Base_traits()) Base_traits(base)33 :Base_traits(base),ppmap_(ppmap){} 34 35 typedef Base_traits Gt; 36 typedef typename boost::property_traits<PointPropertyMap>::key_type Point_2; 37 typedef typename boost::call_traits<Point_2>::param_type Arg_type; 38 39 struct Less_xy_2 : public Base_traits::Less_xy_2{ Less_xy_2Less_xy_240 Less_xy_2(const PointPropertyMap& ppmap,const typename Base_traits::Less_xy_2& base): 41 Base_traits::Less_xy_2(base),ppmap_(ppmap){} 42 const PointPropertyMap& ppmap_; operatorLess_xy_243 bool operator()(Arg_type p,Arg_type q) const { 44 return static_cast<const typename Base_traits::Less_xy_2*>(this)->operator()(get(ppmap_,p),get(ppmap_,q)); 45 } 46 }; 47 48 struct Equal_2 : public Base_traits::Equal_2{ Equal_2Equal_249 Equal_2(const PointPropertyMap& ppmap,const typename Base_traits::Equal_2& base): 50 Base_traits::Equal_2(base),ppmap_(ppmap){} 51 const PointPropertyMap& ppmap_; operatorEqual_252 bool operator()(Arg_type p,Arg_type q) const { 53 return static_cast<const typename Base_traits::Equal_2*>(this)->operator()(get(ppmap_,p),get(ppmap_,q)); 54 } 55 }; 56 57 struct Less_yx_2 : public Base_traits::Less_yx_2{ Less_yx_2Less_yx_258 Less_yx_2(const PointPropertyMap& ppmap,const typename Base_traits::Less_yx_2& base): 59 Base_traits::Less_yx_2(base),ppmap_(ppmap){} 60 const PointPropertyMap& ppmap_; operatorLess_yx_261 bool operator()(Arg_type p,Arg_type q) const { 62 return static_cast<const typename Base_traits::Less_yx_2*>(this)->operator()(get(ppmap_,p),get(ppmap_,q)); 63 } 64 }; 65 66 struct Left_turn_2 : public Base_traits::Left_turn_2{ Left_turn_2Left_turn_267 Left_turn_2(const PointPropertyMap& ppmap,const typename Base_traits::Left_turn_2& base): 68 Base_traits::Left_turn_2(base),ppmap_(ppmap){} 69 const PointPropertyMap& ppmap_; operatorLeft_turn_270 bool operator()(Arg_type p,Arg_type q, Arg_type r) const { 71 return static_cast<const typename Base_traits::Left_turn_2*>(this)->operator()(get(ppmap_,p),get(ppmap_,q),get(ppmap_,r)); 72 } 73 }; 74 75 struct Orientation_2 : public Base_traits::Orientation_2{ Orientation_2Orientation_276 Orientation_2(const PointPropertyMap& ppmap,const typename Base_traits::Orientation_2& base): 77 Base_traits::Orientation_2(base),ppmap_(ppmap){} 78 const PointPropertyMap& ppmap_; operatorOrientation_279 CGAL::Orientation operator()(Arg_type p,Arg_type q, Arg_type r) const { 80 return static_cast<const typename Base_traits::Orientation_2*>(this)->operator()(get(ppmap_,p),get(ppmap_,q),get(ppmap_,r)); 81 } 82 }; 83 84 struct Less_rotate_ccw_2 : public Base_traits::Less_rotate_ccw_2{ Less_rotate_ccw_2Less_rotate_ccw_285 Less_rotate_ccw_2(const PointPropertyMap& ppmap,const typename Base_traits::Less_rotate_ccw_2& base): 86 Base_traits::Less_rotate_ccw_2(base),ppmap_(ppmap){} 87 const PointPropertyMap& ppmap_; operatorLess_rotate_ccw_288 bool operator()(Arg_type p,Arg_type q, Arg_type r) const { 89 return static_cast<const typename Base_traits::Less_rotate_ccw_2*>(this)->operator()(get(ppmap_,p),get(ppmap_,q),get(ppmap_,r)); 90 } 91 }; 92 93 struct Less_signed_distance_to_line_2 : public Base_traits::Less_signed_distance_to_line_2{ Less_signed_distance_to_line_2Less_signed_distance_to_line_294 Less_signed_distance_to_line_2(const PointPropertyMap& ppmap,const typename Base_traits::Less_signed_distance_to_line_2& base): 95 Base_traits::Less_signed_distance_to_line_2(base),ppmap_(ppmap){} 96 const PointPropertyMap& ppmap_; operatorLess_signed_distance_to_line_297 bool operator()(Arg_type p,Arg_type q, Arg_type r, Arg_type s) const { 98 return static_cast<const typename Base_traits::Less_signed_distance_to_line_2*>(this)->operator()(get(ppmap_,p),get(ppmap_,q),get(ppmap_,r),get(ppmap_,s)); 99 } 100 }; 101 equal_2_object()102 Equal_2 equal_2_object () const {return Equal_2(ppmap_,static_cast<const Gt*>(this)->equal_2_object() );} left_turn_2_object()103 Left_turn_2 left_turn_2_object () const {return Left_turn_2(ppmap_,static_cast<const Gt*>(this)->left_turn_2_object() );} orientation_2_object()104 Orientation_2 orientation_2_object () const {return Orientation_2(ppmap_,static_cast<const Gt*>(this)->orientation_2_object() );} less_rotate_ccw_2_object()105 Less_rotate_ccw_2 less_rotate_ccw_2_object () const {return Less_rotate_ccw_2(ppmap_,static_cast<const Gt*>(this)->less_rotate_ccw_2_object() );} less_signed_distance_to_line_2_object()106 Less_signed_distance_to_line_2 less_signed_distance_to_line_2_object () const {return Less_signed_distance_to_line_2(ppmap_,static_cast<const Gt*>(this)->less_signed_distance_to_line_2_object() );} less_xy_2_object()107 Less_xy_2 less_xy_2_object () const {return Less_xy_2(ppmap_,static_cast<const Gt*>(this)->less_xy_2_object() );} less_yx_2_object()108 Less_yx_2 less_yx_2_object () const {return Less_yx_2(ppmap_,static_cast<const Gt*>(this)->less_yx_2_object() );} 109 point_property_map()110 const PointPropertyMap& point_property_map() const {return ppmap_;} 111 112 }; 113 114 } //namespace CGAL 115 116 #include <CGAL/enable_warnings.h> 117 118 #endif //CGAL_CONVEX_HULL_TRAITS_ADAPTER_2_H 119