Do not copy the traits object

This commit is contained in:
Andreas Fabri 2019-04-18 11:33:10 +02:00
parent f6e3221d98
commit 804184ba78
8 changed files with 19 additions and 27 deletions

View File

@ -83,15 +83,11 @@ typedef R::Collinear_are_ordered_along_line_2 Collinear_are_ordered_along_line_2
*/ */
typedef R::Are_strictly_ordered_along_line_2 Are_strictly_ordered_along_line_2; typedef R::Are_strictly_ordered_along_line_2 Are_strictly_ordered_along_line_2;
/*!
*/
typedef CGAL::Polygon_traits_2<R> Poly_Traits;
/*! /*!
*/ */
typedef Poly_Traits::Point_2 Point_2; typedef R::Point_2 Point_2;
/*! /*!
@ -101,7 +97,7 @@ typedef std::list<Point_2> Container;
/*! /*!
*/ */
typedef CGAL::Polygon_2<Poly_Traits, Container> Polygon_2; typedef CGAL::Polygon_2<R, Container> Polygon_2;
/*! /*!

View File

@ -54,12 +54,11 @@ int main( )
} }
std::cout << std::endl; std::cout << std::endl;
} }
assert(CGAL::partition_is_valid_2(polygon.vertices_begin(), assert(CGAL::partition_is_valid_2(polygon.vertices_begin(),
polygon.vertices_end(), polygon.vertices_end(),
partition_polys.begin(), partition_polys.begin(),
partition_polys.end(), partition_polys.end(),
traits)); traits));
return 0; return 0;
} }

View File

@ -84,7 +84,7 @@ public:
} }
private: private:
Traits_ traits; const Traits_& traits;
}; };
template <class Traits_> template <class Traits_>
@ -321,7 +321,7 @@ public:
} }
private : private :
Traits traits; const Traits& traits;
List m_list ; List m_list ;
}; };
@ -532,7 +532,7 @@ private :
} }
private : private :
Traits traits; const Traits& traits;
Map m_map ; Map m_map ;
}; };

View File

@ -290,7 +290,7 @@ private:
} }
Left_turn_2 _left_turn; Left_turn_2 _left_turn;
Traits traits; const Traits& traits;
}; };
template <class Traits_> template <class Traits_>

View File

@ -41,11 +41,11 @@ public:
Partition_is_valid_traits_2() Partition_is_valid_traits_2()
{} {}
Partition_is_valid_traits_2(const Traits& traits) Partition_is_valid_traits_2(const Traits& traits)
: Traits(traits) : Traits(traits)
{} {}
public:
Is_valid Is_valid
is_valid_object(const Traits& traits) const is_valid_object(const Traits& traits) const
{ return Is_valid(traits); } { return Is_valid(traits); }

View File

@ -42,6 +42,7 @@ private:
typedef Partition_traits_adapter_2<Base_traits,PointPropertyMap> Self; typedef Partition_traits_adapter_2<Base_traits,PointPropertyMap> Self;
PointPropertyMap ppmap; PointPropertyMap ppmap;
public: public:
Partition_traits_adapter_2(const Base_traits& base=Base_traits()) Partition_traits_adapter_2(const Base_traits& base=Base_traits())
@ -68,11 +69,11 @@ public:
const PointPropertyMap& ppmap; const PointPropertyMap& ppmap;
typename BaseFct::result_type operator()(Arg_type p, Arg_type q) const { typename BaseFct::result_type operator()(const Arg_type& p, const Arg_type& q) const {
return static_cast<const BaseFct*>(this)->operator()(get(ppmap,p),get(ppmap,q)); return static_cast<const BaseFct*>(this)->operator()(get(ppmap,p),get(ppmap,q));
} }
typename BaseFct::result_type operator()(Arg_type p, Arg_type q, Arg_type r) const { typename BaseFct::result_type operator()(const Arg_type& p, const Arg_type& q, const Arg_type& r) const {
return static_cast<const BaseFct*>(this)->operator()(get(ppmap,p),get(ppmap,q),get(ppmap,r)); return static_cast<const BaseFct*>(this)->operator()(get(ppmap,p),get(ppmap,q),get(ppmap,r));
} }
}; };
@ -91,12 +92,6 @@ public:
typename K::Collinear_are_ordered_along_line_2::result_type
operator()(Arg_type p, Arg_type q, const typename K::Point_2& r) const
{
return fct(p.first, q.first, r);
}
typename K::Collinear_are_ordered_along_line_2::result_type typename K::Collinear_are_ordered_along_line_2::result_type
operator()(Arg_type p, Arg_type q, Arg_type r) const operator()(Arg_type p, Arg_type q, Arg_type r) const
{ {

View File

@ -47,28 +47,28 @@ template <class Traits>
class Is_convex_2 class Is_convex_2
{ {
public: public:
Is_convex_2(Traits t): traits(t) {} Is_convex_2(const Traits& t): traits(t) {}
template <class ForwardIterator> template <class ForwardIterator>
bool operator()(ForwardIterator first, ForwardIterator last) bool operator()(ForwardIterator first, ForwardIterator last)
{ return is_convex_2(first, last, traits); } { return is_convex_2(first, last, traits); }
private: private:
Traits traits; const Traits& traits;
}; };
template <class Traits> template <class Traits>
class Is_y_monotone_2 class Is_y_monotone_2
{ {
public: public:
Is_y_monotone_2(Traits t): traits(t) {} Is_y_monotone_2(const Traits& t): traits(t) {}
template <class ForwardIterator> template <class ForwardIterator>
bool operator()(ForwardIterator first, ForwardIterator last) bool operator()(ForwardIterator first, ForwardIterator last)
{ return is_y_monotone_2(first, last, traits); } { return is_y_monotone_2(first, last, traits); }
private: private:
Traits traits; const Traits& traits;
}; };
} }

View File

@ -147,7 +147,9 @@ class Polygon_2 {
/// @{ /// @{
/// Creates an empty polygon. /// Creates an empty polygon.
Polygon_2(const Traits & p_traits = Traits()) : traits(p_traits) {} Polygon_2() : traits() {}
Polygon_2(const Traits & p_traits) : traits(p_traits) {}
/// Copy constructor. /// Copy constructor.
Polygon_2(const Polygon_2<Traits_P,Container_P>& polygon) Polygon_2(const Polygon_2<Traits_P,Container_P>& polygon)