Used the explicit type Gps_segment_traits_2 to resolve ambiguity

This commit is contained in:
Efi Fogel 2016-06-02 17:59:35 +03:00
parent 81cab3b2bc
commit eed57c67a9
1 changed files with 25 additions and 44 deletions

View File

@ -25,6 +25,7 @@
#include <CGAL/Minkowski_sum_2/Minkowski_sum_conv_2.h> #include <CGAL/Minkowski_sum_2/Minkowski_sum_conv_2.h>
#include <CGAL/Minkowski_sum_2/Minkowski_sum_decomp_2.h> #include <CGAL/Minkowski_sum_2/Minkowski_sum_decomp_2.h>
#include <CGAL/Polygon_nop_decomposition_2.h> #include <CGAL/Polygon_nop_decomposition_2.h>
#include <CGAL/Gps_segment_traits_2.h>
#include <list> #include <list>
@ -306,6 +307,17 @@ minkowski_sum_2(const Polygon_2<Kernel_, Container_>& pgn1,
* \param[in] decomposition_strategy A functor for decomposing polygons. * \param[in] decomposition_strategy A functor for decomposing polygons.
* \param[in] traits The traits. * \param[in] traits The traits.
* \return The resulting polygon with holes, representing the sum. * \return The resulting polygon with holes, representing the sum.
*
* The type of the last argument, namely,
* Gps_segment_traits_2<Kernel_, Container_>
* and the type
* const typename Minkowski_sum_by_decomposition_2<DecompositionStrategy1_,
* DecompositionStrategy2_,
* Container_>::Traits_2>
* are exchangable except for in one case, where there is an ambiguity.
* Thus, we use the former, even though it is less generic, as change to the
* traits type in Minkowski_sum_by_decomposition_2 would require a similar
* change here.
*/ */
template <typename Kernel_, typename Container_, template <typename Kernel_, typename Container_,
typename DecompositionStrategy1_, typename DecompositionStrategy2_> typename DecompositionStrategy1_, typename DecompositionStrategy2_>
@ -314,10 +326,7 @@ minkowski_sum_2(const Polygon_2<Kernel_, Container_>& pgn1,
const Polygon_2<Kernel_, Container_>& pgn2, const Polygon_2<Kernel_, Container_>& pgn2,
const DecompositionStrategy1_& decomposition_strategy1, const DecompositionStrategy1_& decomposition_strategy1,
const DecompositionStrategy2_& decomposition_strategy2, const DecompositionStrategy2_& decomposition_strategy2,
const typename const Gps_segment_traits_2<Kernel_, Container_>& traits)
Minkowski_sum_by_decomposition_2<DecompositionStrategy1_,
DecompositionStrategy2_,
Container_>::Traits_2& traits)
{ {
typedef Container_ Container; typedef Container_ Container;
typedef DecompositionStrategy1_ Decomposition_strategy1; typedef DecompositionStrategy1_ Decomposition_strategy1;
@ -372,10 +381,7 @@ minkowski_sum_2(const Polygon_with_holes_2<Kernel_, Container_>& pgn1,
const Polygon_with_holes_2<Kernel_, Container_>& pgn2, const Polygon_with_holes_2<Kernel_, Container_>& pgn2,
const DecompositionStrategy1_& decomposition_strategy1, const DecompositionStrategy1_& decomposition_strategy1,
const DecompositionStrategy2_& decomposition_strategy2, const DecompositionStrategy2_& decomposition_strategy2,
const typename const Gps_segment_traits_2<Kernel_, Container_>& traits)
Minkowski_sum_by_decomposition_2<DecompositionStrategy1_,
DecompositionStrategy2_,
Container_>::Traits_2& traits)
{ {
typedef Kernel_ Kernel; typedef Kernel_ Kernel;
typedef Container_ Container; typedef Container_ Container;
@ -435,10 +441,7 @@ minkowski_sum_2(const Polygon_2<Kernel_, Container_>& pgn1,
const Polygon_with_holes_2<Kernel_, Container_>& pgn2, const Polygon_with_holes_2<Kernel_, Container_>& pgn2,
const DecompositionStrategy1_& decomposition_strategy1, const DecompositionStrategy1_& decomposition_strategy1,
const DecompositionStrategy2_& decomposition_strategy2, const DecompositionStrategy2_& decomposition_strategy2,
const typename const Gps_segment_traits_2<Kernel_, Container_>& traits)
Minkowski_sum_by_decomposition_2<DecompositionStrategy1_,
DecompositionStrategy2_,
Container_>::Traits_2& traits)
{ {
typedef Kernel_ Kernel; typedef Kernel_ Kernel;
typedef Container_ Container; typedef Container_ Container;
@ -449,7 +452,7 @@ minkowski_sum_2(const Polygon_2<Kernel_, Container_>& pgn1,
Decomposition_strategy2, Container> Decomposition_strategy2, Container>
mink_sum(decomposition_strategy1, decomposition_strategy2, traits); mink_sum(decomposition_strategy1, decomposition_strategy2, traits);
Hole_filter_2<Kernel, Container> hole_filter; Hole_filter_2<Kernel, Container> hole_filter;
Polygon_with_holes_2<Kernel,Container> filtered_pgn2; Polygon_with_holes_2<Kernel, Container> filtered_pgn2;
hole_filter(pgn2, pgn1, filtered_pgn2); hole_filter(pgn2, pgn1, filtered_pgn2);
return mink_sum(pgn1, filtered_pgn2); return mink_sum(pgn1, filtered_pgn2);
} }
@ -496,10 +499,7 @@ minkowski_sum_2(const Polygon_with_holes_2<Kernel_, Container_>& pgn1,
const Polygon_2<Kernel_, Container_>& pgn2, const Polygon_2<Kernel_, Container_>& pgn2,
const DecompositionStrategy1_& decomposition_strategy1, const DecompositionStrategy1_& decomposition_strategy1,
const DecompositionStrategy2_& decomposition_strategy2, const DecompositionStrategy2_& decomposition_strategy2,
const typename const Gps_segment_traits_2<Kernel_, Container_>& traits)
Minkowski_sum_by_decomposition_2<DecompositionStrategy1_,
DecompositionStrategy2_,
Container_>::Traits_2& traits)
{ {
return minkowski_sum_2(pgn2, pgn1, return minkowski_sum_2(pgn2, pgn1,
decomposition_strategy2, decomposition_strategy1, decomposition_strategy2, decomposition_strategy1,
@ -550,10 +550,7 @@ Polygon_with_holes_2<Kernel_, Container_>
minkowski_sum_2(const Polygon_2<Kernel_, Container_>& pgn1, minkowski_sum_2(const Polygon_2<Kernel_, Container_>& pgn1,
const Polygon_2<Kernel_, Container_>& pgn2, const Polygon_2<Kernel_, Container_>& pgn2,
const DecompositionStrategy1_& decomposition_strategy1, const DecompositionStrategy1_& decomposition_strategy1,
const typename const Gps_segment_traits_2<Kernel_, Container_>& traits)
Minkowski_sum_by_decomposition_2<DecompositionStrategy1_,
DecompositionStrategy1_,
Container_>::Traits_2& traits)
{ {
typedef Container_ Container; typedef Container_ Container;
typedef DecompositionStrategy1_ Decomposition_strategy1; typedef DecompositionStrategy1_ Decomposition_strategy1;
@ -605,10 +602,7 @@ Polygon_with_holes_2<Kernel_, Container_>
minkowski_sum_2(const Polygon_with_holes_2<Kernel_, Container_>& pgn1, minkowski_sum_2(const Polygon_with_holes_2<Kernel_, Container_>& pgn1,
const Polygon_with_holes_2<Kernel_, Container_>& pgn2, const Polygon_with_holes_2<Kernel_, Container_>& pgn2,
const DecompositionStrategy1_& decomposition_strategy1, const DecompositionStrategy1_& decomposition_strategy1,
const typename const Gps_segment_traits_2<Kernel_, Container_>& traits)
Minkowski_sum_by_decomposition_2<DecompositionStrategy1_,
DecompositionStrategy1_,
Container_>::Traits_2& traits)
{ {
typedef Kernel_ Kernel; typedef Kernel_ Kernel;
typedef Container_ Container; typedef Container_ Container;
@ -665,10 +659,7 @@ Polygon_with_holes_2<Kernel_, Container_>
minkowski_sum_2(const Polygon_2<Kernel_, Container_>& pgn1, minkowski_sum_2(const Polygon_2<Kernel_, Container_>& pgn1,
const Polygon_with_holes_2<Kernel_, Container_>& pgn2, const Polygon_with_holes_2<Kernel_, Container_>& pgn2,
const DecompositionStrategy1_& decomposition_strategy1, const DecompositionStrategy1_& decomposition_strategy1,
const typename const Gps_segment_traits_2<Kernel_, Container_>& traits)
Minkowski_sum_by_decomposition_2<DecompositionStrategy1_,
DecompositionStrategy1_,
Container_>::Traits_2& traits)
{ {
typedef Kernel_ Kernel; typedef Kernel_ Kernel;
typedef Container_ Container; typedef Container_ Container;
@ -723,10 +714,7 @@ Polygon_with_holes_2<Kernel_, Container_>
minkowski_sum_2(const Polygon_with_holes_2<Kernel_, Container_>& pgn1, minkowski_sum_2(const Polygon_with_holes_2<Kernel_, Container_>& pgn1,
const Polygon_2<Kernel_, Container_>& pgn2, const Polygon_2<Kernel_, Container_>& pgn2,
const DecompositionStrategy1_& decomposition_strategy1, const DecompositionStrategy1_& decomposition_strategy1,
const typename const Gps_segment_traits_2<Kernel_, Container_>& traits)
Minkowski_sum_by_decomposition_2<DecompositionStrategy1_,
DecompositionStrategy1_,
Container_>::Traits_2& traits)
{ {
return minkowski_sum_2(pgn2, pgn1, return minkowski_sum_2(pgn2, pgn1,
decomposition_strategy1, decomposition_strategy1, decomposition_strategy1, decomposition_strategy1,
@ -773,8 +761,7 @@ minkowski_sum_by_decomposition_2
(const Polygon_2<Kernel_, Container_>& pgn1, (const Polygon_2<Kernel_, Container_>& pgn1,
const Polygon_2<Kernel_, Container_>& pgn2, const Polygon_2<Kernel_, Container_>& pgn2,
const Decomposition_& decomp, const Decomposition_& decomp,
const typename Minkowski_sum_by_decomposition_2<Decomposition_, Decomposition_, const Gps_segment_traits_2<Kernel_, Container_>& traits)
Container_>::Traits_2& traits)
{ {
typedef Kernel_ Kernel; typedef Kernel_ Kernel;
typedef Container_ Container; typedef Container_ Container;
@ -852,9 +839,7 @@ minkowski_sum_by_decomposition_2
const Polygon_with_holes_2<Kernel_, Container_>& pgn2, const Polygon_with_holes_2<Kernel_, Container_>& pgn2,
const NoHolesDecomposition_& decomp_no_holes, const NoHolesDecomposition_& decomp_no_holes,
const WithHolesDecomposition_& decomp_with_holes, const WithHolesDecomposition_& decomp_with_holes,
const typename Minkowski_sum_by_decomposition_2<NoHolesDecomposition_, const Gps_segment_traits_2<Kernel_, Container_>& traits)
WithHolesDecomposition_,
Container_>::Traits_2& traits)
{ {
typedef Kernel_ Kernel; typedef Kernel_ Kernel;
typedef Container_ Container; typedef Container_ Container;
@ -997,9 +982,7 @@ minkowski_sum_by_decomposition_2
const Polygon_with_holes_2<Kernel_, Container_>& pgn2, const Polygon_with_holes_2<Kernel_, Container_>& pgn2,
const NoHolesDecomposition_& decomp_no_holes, const NoHolesDecomposition_& decomp_no_holes,
const WithHolesDecomposition_& decomp_with_holes, const WithHolesDecomposition_& decomp_with_holes,
const typename Minkowski_sum_by_decomposition_2<NoHolesDecomposition_, const Gps_segment_traits_2<Kernel_, Container_>& traits)
WithHolesDecomposition_,
Container_>::Traits_2& traits)
{ {
typedef Kernel_ Kernel; typedef Kernel_ Kernel;
typedef Container_ Container; typedef Container_ Container;
@ -1106,9 +1089,7 @@ minkowski_sum_by_decomposition_2
const Polygon_2<Kernel_, Container_>& pgn2, const Polygon_2<Kernel_, Container_>& pgn2,
const NoHoleDecomposition_& decomp_no_holes, const NoHoleDecomposition_& decomp_no_holes,
const WithHolesDecomposition_& decomp_with_holes, const WithHolesDecomposition_& decomp_with_holes,
const typename Minkowski_sum_by_decomposition_2<NoHoleDecomposition_, const Gps_segment_traits_2<Kernel_, Container_>& traits)
WithHolesDecomposition_,
Container_>::Traits_2& traits)
{ {
return minkowski_sum_by_decomposition_2(pgn2, pgn1, return minkowski_sum_by_decomposition_2(pgn2, pgn1,
decomp_no_holes, decomp_with_holes, decomp_no_holes, decomp_with_holes,