diff --git a/include/boost/geometry/algorithms/equals.hpp b/include/boost/geometry/algorithms/equals.hpp index 4a2d2d93b..36aba031b 100644 --- a/include/boost/geometry/algorithms/equals.hpp +++ b/include/boost/geometry/algorithms/equals.hpp @@ -157,14 +157,38 @@ template typename Geometry2, typename Tag1 = typename tag::type, typename Tag2 = typename tag::type, - std::size_t DimensionCount = dimension::type::value + std::size_t DimensionCount = dimension::type::value, + bool Reverse = reverse_dispatch::type::value > struct equals {}; -template -struct equals +// If reversal is needed, perform it +template +< + typename Geometry1, typename Geometry2, + typename Tag1, typename Tag2, + std::size_t DimensionCount +> +struct equals + : equals +{ + static inline bool apply(Geometry1 const& g1, Geometry2 const& g2) + { + return equals + < + Geometry2, Geometry1, + Tag2, Tag1, + DimensionCount, + false + >::apply(g2, g1); + } +}; + + +template +struct equals : geometry::detail::not_ < P1, @@ -174,70 +198,48 @@ struct equals {}; -template -struct equals +template +struct equals : detail::equals::box_box<0, DimensionCount> {}; -template -struct equals +template +struct equals : detail::equals::equals_by_collection {}; -template -struct equals +template +struct equals : detail::equals::equals_by_collection {}; -template -struct equals +template +struct equals : detail::equals::equals_by_collection {}; -template -struct equals +template +struct equals : detail::equals::equals_by_collection {}; -template -struct equals +template +struct equals : detail::equals::equals_by_collection {}; -template -struct equals +template +struct equals : detail::equals::equals_by_collection {}; -template -< - typename Geometry1, - typename Geometry2, - typename Tag1 = typename tag::type, - typename Tag2 = typename tag::type, - std::size_t DimensionCount = dimension::type::value -> -struct equals_reversed -{ - static inline bool apply(Geometry1 const& g1, Geometry2 const& g2) - { - return equals - < - Geometry2, Geometry1, - Tag2, Tag1, - DimensionCount - >::apply(g2, g1); - } -}; - - } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH @@ -268,20 +270,7 @@ inline bool equals(Geometry1 const& geometry1, Geometry2 const& geometry2) Geometry2 const >(); - return boost::mpl::if_c - < - reverse_dispatch::type::value, - dispatch::equals_reversed - < - Geometry1, - Geometry2 - >, - dispatch::equals - < - Geometry1, - Geometry2 - > - >::type::apply(geometry1, geometry2); + return dispatch::equals::apply(geometry1, geometry2); }