From 41b54360ff917a261d3f6f752e3c2c51edada773 Mon Sep 17 00:00:00 2001 From: Max Verevkin Date: Sun, 3 Apr 2022 22:52:12 +0300 Subject: small refactoring --- src/ord_adaptor.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/ord_adaptor.rs (limited to 'src/ord_adaptor.rs') diff --git a/src/ord_adaptor.rs b/src/ord_adaptor.rs new file mode 100644 index 0000000..c7c6763 --- /dev/null +++ b/src/ord_adaptor.rs @@ -0,0 +1,18 @@ +//! Newtypes to use floating numbers in sorting algs + +use std::cmp::Ordering; + +/// Defaults to `Ordering::Less` if the wrapped value can't be compared +#[derive(PartialEq, PartialOrd)] +#[repr(transparent)] +pub struct DefaultLess(pub T); + +// Not ideal, but `Ord` requires `Eq`, so... +impl Eq for DefaultLess {} + +#[allow(clippy::derive_ord_xor_partial_ord)] +impl Ord for DefaultLess { + fn cmp(&self, other: &Self) -> Ordering { + self.partial_cmp(other).unwrap_or(Ordering::Less) + } +} -- cgit v1.3.1