Implement cmp traits for Rc<T> and add a ptr_eq method.
This commit is contained in:
parent
ce45bb7f44
commit
fdac9e470c
1 changed files with 55 additions and 0 deletions
|
|
@ -22,6 +22,7 @@ use ops::Drop;
|
|||
use kinds::{Freeze, Send};
|
||||
use clone::{Clone, DeepClone};
|
||||
use cell::RefCell;
|
||||
use cmp::{Eq, TotalEq, Ord, TotalOrd, Ordering};
|
||||
|
||||
struct RcBox<T> {
|
||||
value: T,
|
||||
|
|
@ -80,6 +81,60 @@ impl<T> Rc<T> {
|
|||
pub fn borrow<'r>(&'r self) -> &'r T {
|
||||
unsafe { &(*self.ptr).value }
|
||||
}
|
||||
|
||||
/// Determine if two reference-counted pointers point to the same object
|
||||
#[inline]
|
||||
pub fn ptr_eq(&self, other: &Rc<T>) -> bool {
|
||||
self.ptr == other.ptr
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Eq> Eq for Rc<T> {
|
||||
#[inline]
|
||||
fn eq(&self, other: &Rc<T>) -> bool {
|
||||
unsafe { (*self.ptr).value == (*other.ptr).value }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn ne(&self, other: &Rc<T>) -> bool {
|
||||
unsafe { (*self.ptr).value != (*other.ptr).value }
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: TotalEq> TotalEq for Rc<T> {
|
||||
#[inline]
|
||||
fn equals(&self, other: &Rc<T>) -> bool {
|
||||
unsafe { (*self.ptr).value.equals(&(*other.ptr).value) }
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Ord> Ord for Rc<T> {
|
||||
#[inline]
|
||||
fn lt(&self, other: &Rc<T>) -> bool {
|
||||
unsafe { (*self.ptr).value < (*other.ptr).value }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn le(&self, other: &Rc<T>) -> bool {
|
||||
unsafe { (*self.ptr).value <= (*other.ptr).value }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn ge(&self, other: &Rc<T>) -> bool {
|
||||
unsafe { (*self.ptr).value >= (*other.ptr).value }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn gt(&self, other: &Rc<T>) -> bool {
|
||||
unsafe { (*self.ptr).value > (*other.ptr).value }
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: TotalOrd> TotalOrd for Rc<T> {
|
||||
#[inline]
|
||||
fn cmp(&self, other: &Rc<T>) -> Ordering {
|
||||
unsafe { (*self.ptr).value.cmp(&(*other.ptr).value) }
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Clone for Rc<T> {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue