Skip to main content

bixverse_core/utils/
heap_structures.rs

1//! Contains structures designed to be put on the heap. One key application is
2//! checking distances via the [RevOrderedFloat].
3
4use std::cmp::Ordering;
5
6use crate::prelude::*;
7
8/// Wrapper for generic float to use in BinaryHeap (min-heap)
9#[derive(Clone, Copy)]
10pub struct RevOrderedFloat<T: BixverseFloat>(pub T);
11
12impl<T> RevOrderedFloat<T>
13where
14    T: BixverseFloat,
15{
16    /// Returns the value stored in the RevOrderedFloat
17    pub fn get_value(&self) -> T {
18        self.0
19    }
20}
21
22impl<T: BixverseFloat> PartialEq for RevOrderedFloat<T> {
23    fn eq(&self, other: &Self) -> bool {
24        self.0.total_cmp(&other.0) == Ordering::Equal
25    }
26}
27
28impl<T: BixverseFloat> Eq for RevOrderedFloat<T> {}
29
30impl<T: BixverseFloat> PartialOrd for RevOrderedFloat<T> {
31    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
32        Some(self.cmp(other))
33    }
34}
35
36impl<T: BixverseFloat> Ord for RevOrderedFloat<T> {
37    fn cmp(&self, other: &Self) -> Ordering {
38        other.0.total_cmp(&self.0)
39    }
40}