geometry_strategy/
reversal.rs1use geometry_trait::Geometry;
9
10use crate::distance::DistanceStrategy;
11use crate::intersects::IntersectsStrategy;
12
13#[derive(Debug, Default, Clone, Copy)]
20pub struct Reversed<S>(pub S);
21
22impl<A, B, S> DistanceStrategy<B, A> for Reversed<S>
23where
24 A: Geometry,
25 B: Geometry,
26 S: DistanceStrategy<A, B>,
27{
28 type Out = S::Out;
29 type Comparable = Reversed<S::Comparable>;
30
31 #[inline]
32 fn distance(&self, b: &B, a: &A) -> S::Out {
33 self.0.distance(a, b)
34 }
35
36 #[inline]
37 fn comparable(&self) -> Self::Comparable {
38 Reversed(self.0.comparable())
39 }
40}
41
42impl<A, B, S> IntersectsStrategy<B, A> for Reversed<S>
43where
44 S: IntersectsStrategy<A, B>,
45{
46 #[inline]
47 fn intersects(&self, b: &B, a: &A) -> bool {
48 self.0.intersects(a, b)
49 }
50}