#[repr(transparent)]pub struct Ordered<T>(pub T);
Expand description
A wrapper type that implements PartialOrd
and Ord
.
§Examples
use core::cmp::Ordering;
use ordered::{ArbitraryOrd, Ordered};
/// A point in 2D space.
///
/// We do not want users to be able to write `a < b` because it is not well defined.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
struct Point {
x: u32,
y: u32,
}
impl ArbitraryOrd for Point {
fn arbitrary_cmp(&self, other: &Self) -> Ordering {
// Just use whatever order tuple cmp gives us.
(self.x, self.y).cmp(&(other.x, other.y))
}
}
let point = Point { x: 0, y: 1 };
let ordered = Ordered(point);
assert_eq!(*ordered, point); // Use `ops::Deref`.
assert_eq!(&ordered.0, ordered.as_ref()); // Use the public inner field or `AsRef`.
Tuple Fields§
§0: T
Implementations§
Source§impl<T> Ordered<T>
impl<T> Ordered<T>
Sourcepub const fn new(inner: T) -> Self
pub const fn new(inner: T) -> Self
Creates a new wrapped ordered type.
The inner type is public so this function is never explicitly needed.
Sourcepub fn from_ref(value: &T) -> &Self
pub fn from_ref(value: &T) -> &Self
Creates an Ordered<T>
from a reference.
This allows: let found = map.get(Ordered::from_ref(&a));
Examples found in repository?
examples/point.rs (line 21)
9fn main() {
10 let mut map = BTreeMap::new();
11
12 let a = Point { x: 2, y: 3 };
13 let b = Point { x: 1, y: 5 };
14
15 map.insert(Ordered::from(a), "some interesting value");
16 map.insert(Ordered::from(b), "some other interesting value");
17
18 println!();
19 println!("Looking in map for key: {}", a);
20
21 let found = map.get(Ordered::from_ref(&a)).expect("handle item not found");
22
23 println!("Found it, with value: {}", found);
24}
Sourcepub const fn as_inner(&self) -> &T
👎Deprecated since 0.3.0: use ops::Deref
instead
pub const fn as_inner(&self) -> &T
ops::Deref
insteadReturns a reference to the inner object.
We also implement core::borrow::Borrow
so this function is never explicitly needed.
Sourcepub fn into_inner(self) -> T
👎Deprecated since 0.3.0: use ops::Deref
instead
pub fn into_inner(self) -> T
ops::Deref
insteadReturns the inner object.
We also implement core::ops::Deref
so this function is never explicitly needed.
Trait Implementations§
Source§impl<T> BorrowMut<T> for Ordered<T>
impl<T> BorrowMut<T> for Ordered<T>
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T: ArbitraryOrd + Eq> Ord for Ordered<T>
impl<T: ArbitraryOrd + Eq> Ord for Ordered<T>
Source§impl<T: ArbitraryOrd> PartialOrd for Ordered<T>
impl<T: ArbitraryOrd> PartialOrd for Ordered<T>
impl<T: Copy> Copy for Ordered<T>
impl<T: Eq> Eq for Ordered<T>
impl<T> StructuralPartialEq for Ordered<T>
Auto Trait Implementations§
impl<T> Freeze for Ordered<T>where
T: Freeze,
impl<T> RefUnwindSafe for Ordered<T>where
T: RefUnwindSafe,
impl<T> Send for Ordered<T>where
T: Send,
impl<T> Sync for Ordered<T>where
T: Sync,
impl<T> Unpin for Ordered<T>where
T: Unpin,
impl<T> UnwindSafe for Ordered<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more