mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
Auto merge of #33306 - vadixidav:master, r=alexcrichton
add implementation of Ord for Cell<T> and RefCell<T> where T: Ord Raised this in issue #33305.
This commit is contained in:
commit
992bb1332f
@ -145,7 +145,7 @@
|
||||
#![stable(feature = "rust1", since = "1.0.0")]
|
||||
|
||||
use clone::Clone;
|
||||
use cmp::{PartialEq, Eq};
|
||||
use cmp::{PartialEq, Eq, PartialOrd, Ord, Ordering};
|
||||
use default::Default;
|
||||
use marker::{Copy, Send, Sync, Sized, Unsize};
|
||||
use ops::{Deref, DerefMut, Drop, FnOnce, CoerceUnsized};
|
||||
@ -279,6 +279,42 @@ impl<T:PartialEq + Copy> PartialEq for Cell<T> {
|
||||
#[stable(feature = "cell_eq", since = "1.2.0")]
|
||||
impl<T:Eq + Copy> Eq for Cell<T> {}
|
||||
|
||||
#[stable(feature = "cell_ord", since = "1.10.0")]
|
||||
impl<T:PartialOrd + Copy> PartialOrd for Cell<T> {
|
||||
#[inline]
|
||||
fn partial_cmp(&self, other: &Cell<T>) -> Option<Ordering> {
|
||||
self.get().partial_cmp(&other.get())
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn lt(&self, other: &Cell<T>) -> bool {
|
||||
self.get() < other.get()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn le(&self, other: &Cell<T>) -> bool {
|
||||
self.get() <= other.get()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn gt(&self, other: &Cell<T>) -> bool {
|
||||
self.get() > other.get()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn ge(&self, other: &Cell<T>) -> bool {
|
||||
self.get() >= other.get()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "cell_ord", since = "1.10.0")]
|
||||
impl<T:Ord + Copy> Ord for Cell<T> {
|
||||
#[inline]
|
||||
fn cmp(&self, other: &Cell<T>) -> Ordering {
|
||||
self.get().cmp(&other.get())
|
||||
}
|
||||
}
|
||||
|
||||
/// A mutable memory location with dynamically checked borrow rules
|
||||
///
|
||||
/// See the [module-level documentation](index.html) for more.
|
||||
@ -514,6 +550,42 @@ impl<T: ?Sized + PartialEq> PartialEq for RefCell<T> {
|
||||
#[stable(feature = "cell_eq", since = "1.2.0")]
|
||||
impl<T: ?Sized + Eq> Eq for RefCell<T> {}
|
||||
|
||||
#[stable(feature = "cell_ord", since = "1.10.0")]
|
||||
impl<T: ?Sized + PartialOrd> PartialOrd for RefCell<T> {
|
||||
#[inline]
|
||||
fn partial_cmp(&self, other: &RefCell<T>) -> Option<Ordering> {
|
||||
self.borrow().partial_cmp(&*other.borrow())
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn lt(&self, other: &RefCell<T>) -> bool {
|
||||
*self.borrow() < *other.borrow()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn le(&self, other: &RefCell<T>) -> bool {
|
||||
*self.borrow() <= *other.borrow()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn gt(&self, other: &RefCell<T>) -> bool {
|
||||
*self.borrow() > *other.borrow()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn ge(&self, other: &RefCell<T>) -> bool {
|
||||
*self.borrow() >= *other.borrow()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "cell_ord", since = "1.10.0")]
|
||||
impl<T: ?Sized + Ord> Ord for RefCell<T> {
|
||||
#[inline]
|
||||
fn cmp(&self, other: &RefCell<T>) -> Ordering {
|
||||
self.borrow().cmp(&*other.borrow())
|
||||
}
|
||||
}
|
||||
|
||||
struct BorrowRef<'b> {
|
||||
borrow: &'b Cell<BorrowFlag>,
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user