Pass equals policy to strategies from less policy

This commit is contained in:
Vissarion Fisikopoulos 2023-07-06 16:26:26 +03:00
parent a4923db148
commit f719a26b44
8 changed files with 44 additions and 22 deletions

View File

@ -190,7 +190,7 @@ private:
point_type most_left, most_right;
geometry::less<point_type, -1, Strategy> less;
geometry::less_exact<point_type, -1, Strategy> less;
detail::convex_hull::get_extremes(in_proxy, most_left, most_right, less);

View File

@ -38,6 +38,29 @@ namespace boost { namespace geometry
on equal x-es then on y, etc.
If a dimension is specified, only that dimension is considered
*/
template
<
typename Point = void,
int Dimension = -1,
typename StrategyOrTag = void
>
struct less_exact
{
using first_argument_type = Point;
using second_argument_type = Point;
using result_type = bool;
inline bool operator()(Point const& left, Point const& right) const
{
return StrategyOrTag::template compare_type
<
strategy::compare::less,
strategy::compare::equals_exact
>::apply(left, right);
}
};
template
<
typename Point = void,
@ -54,7 +77,8 @@ struct less
{
return StrategyOrTag::template compare_type
<
strategy::compare::less
strategy::compare::less,
strategy::compare::equals_epsilon
>::apply(left, right);
}
};
@ -91,7 +115,8 @@ struct less<void, Dimension, Strategy>
{
return Strategy::template compare_type
<
strategy::compare::less
strategy::compare::less,
strategy::compare::equals_epsilon
>::apply(left, right);
}
};

View File

@ -50,11 +50,11 @@ public:
return side_strategy_type();
}
template <typename ComparePolicy>
template <typename ComparePolicy, typename EqualsPolicy>
using compare_type = typename strategy::compare::cartesian
<
ComparePolicy,
strategy::compare::equals_exact,
EqualsPolicy,
-1
>;
};

View File

@ -65,11 +65,11 @@ public:
>(base_t::m_spheroid);
}
template <typename ComparePolicy>
template <typename ComparePolicy, typename EqualsPolicy>
using compare_type = typename strategy::compare::spherical
<
ComparePolicy,
strategy::compare::equals_exact,
EqualsPolicy,
-1
>;
};

View File

@ -47,11 +47,11 @@ public:
return strategy::side::spherical_side_formula<CalculationType>();
}
template <typename ComparePolicy>
template <typename ComparePolicy, typename EqualsPolicy>
using compare_type = typename strategy::compare::spherical
<
ComparePolicy,
strategy::compare::equals_exact,
EqualsPolicy,
-1
>;
};

View File

@ -189,11 +189,11 @@ public:
return strategy::within::cartesian_box_box();
}
template <typename ComparePolicy>
template <typename ComparePolicy, typename EqualsPolicy>
using compare_type = typename strategy::compare::cartesian
<
ComparePolicy,
strategy::compare::equals_epsilon,
EqualsPolicy,
-1
>;
};

View File

@ -211,16 +211,13 @@ public:
return strategy::within::spherical_box_box();
}
template <typename ComparePolicy>
template <typename ComparePolicy, typename EqualsPolicy>
using compare_type = typename strategy::compare::spherical
<
ComparePolicy,
strategy::compare::equals_epsilon,
EqualsPolicy,
-1
>;
//template <typename ComparePolicy, typename EqualsPolicy, int Dimension>
//using compare_type = strategy::compare::spherical<ComparePolicy, EqualsPolicy, Dimension>;
};
@ -293,12 +290,12 @@ struct strategy_converter<strategy::intersection::geographic_segments<FormulaPol
>(base_t::m_spheroid);
}
template <typename ComparePolicy>
using compare_type = typename strategy::compare::cartesian
template <typename ComparePolicy, typename EqualsPolicy>
using compare_type = typename strategy::compare::spherical
<
ComparePolicy,
strategy::compare::equals_epsilon,
-1
EqualsPolicy,
-1
>;
};

View File

@ -195,11 +195,11 @@ public:
return strategy::within::spherical_box_box();
}
template <typename ComparePolicy>
template <typename ComparePolicy, typename EqualsPolicy>
using compare_type = typename strategy::compare::spherical
<
ComparePolicy,
strategy::compare::equals_epsilon,
EqualsPolicy,
-1
>;
};