use geometry_trait::Geometry;
use crate::distance::DistanceStrategy;
use crate::intersects::IntersectsStrategy;
#[derive(Debug, Default, Clone, Copy)]
pub struct Reversed<S>(pub S);
impl<A, B, S> DistanceStrategy<B, A> for Reversed<S>
where
A: Geometry,
B: Geometry,
S: DistanceStrategy<A, B>,
{
type Out = S::Out;
type Comparable = Reversed<S::Comparable>;
#[inline]
fn distance(&self, b: &B, a: &A) -> S::Out {
self.0.distance(a, b)
}
#[inline]
fn comparable(&self) -> Self::Comparable {
Reversed(self.0.comparable())
}
}
impl<A, B, S> IntersectsStrategy<B, A> for Reversed<S>
where
S: IntersectsStrategy<A, B>,
{
#[inline]
fn intersects(&self, b: &B, a: &A) -> bool {
self.0.intersects(a, b)
}
}