diff options
| author | bors <bors@rust-lang.org> | 2015-05-16 16:06:05 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-05-16 16:06:05 +0000 |
| commit | 5e535eae5c4b70879aefc050a5fe0b8137c07eac (patch) | |
| tree | c4f832a5601f48e6dbe1a526205510380dcfccbe /src/liballoc | |
| parent | 63b000b1b81ecc197112a60d9b79901cffa4e0bb (diff) | |
| parent | fa28642de9fc158613f294896e62e12c3067714e (diff) | |
| download | rust-5e535eae5c4b70879aefc050a5fe0b8137c07eac.tar.gz rust-5e535eae5c4b70879aefc050a5fe0b8137c07eac.zip | |
Auto merge of #25460 - P1start:rc-unsized-impls, r=luqmana
Most of `Rc`’s trait implementations were DST-ified in #24619, but not these ones.
Diffstat (limited to 'src/liballoc')
| -rw-r--r-- | src/liballoc/rc.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/liballoc/rc.rs b/src/liballoc/rc.rs index f2b83fdeefa..88c5c38172a 100644 --- a/src/liballoc/rc.rs +++ b/src/liballoc/rc.rs @@ -634,7 +634,18 @@ impl<T: Default> Default for Rc<T> { } #[stable(feature = "rust1", since = "1.0.0")] +#[cfg(stage0)] impl<T: PartialEq> PartialEq for Rc<T> { + #[inline(always)] + fn eq(&self, other: &Rc<T>) -> bool { **self == **other } + + #[inline(always)] + fn ne(&self, other: &Rc<T>) -> bool { **self != **other } +} + +#[stable(feature = "rust1", since = "1.0.0")] +#[cfg(not(stage0))] +impl<T: ?Sized + PartialEq> PartialEq for Rc<T> { /// Equality for two `Rc<T>`s. /// /// Two `Rc<T>`s are equal if their inner value are equal. @@ -669,10 +680,35 @@ impl<T: PartialEq> PartialEq for Rc<T> { } #[stable(feature = "rust1", since = "1.0.0")] +#[cfg(stage0)] impl<T: Eq> Eq for Rc<T> {} +#[stable(feature = "rust1", since = "1.0.0")] +#[cfg(not(stage0))] +impl<T: ?Sized + Eq> Eq for Rc<T> {} #[stable(feature = "rust1", since = "1.0.0")] +#[cfg(stage0)] impl<T: PartialOrd> PartialOrd for Rc<T> { + #[inline(always)] + fn partial_cmp(&self, other: &Rc<T>) -> Option<Ordering> { + (**self).partial_cmp(&**other) + } + + #[inline(always)] + fn lt(&self, other: &Rc<T>) -> bool { **self < **other } + + #[inline(always)] + fn le(&self, other: &Rc<T>) -> bool { **self <= **other } + + #[inline(always)] + fn gt(&self, other: &Rc<T>) -> bool { **self > **other } + + #[inline(always)] + fn ge(&self, other: &Rc<T>) -> bool { **self >= **other } +} +#[stable(feature = "rust1", since = "1.0.0")] +#[cfg(not(stage0))] +impl<T: ?Sized + PartialOrd> PartialOrd for Rc<T> { /// Partial comparison for two `Rc<T>`s. /// /// The two are compared by calling `partial_cmp()` on their inner values. @@ -757,7 +793,14 @@ impl<T: PartialOrd> PartialOrd for Rc<T> { } #[stable(feature = "rust1", since = "1.0.0")] +#[cfg(stage0)] impl<T: Ord> Ord for Rc<T> { + #[inline] + fn cmp(&self, other: &Rc<T>) -> Ordering { (**self).cmp(&**other) } +} +#[stable(feature = "rust1", since = "1.0.0")] +#[cfg(not(stage0))] +impl<T: ?Sized + Ord> Ord for Rc<T> { /// Comparison for two `Rc<T>`s. /// /// The two are compared by calling `cmp()` on their inner values. @@ -1399,4 +1442,9 @@ mod tests { assert_eq!(format!("{:?}", foo), "75"); } + #[test] + fn test_unsized() { + let foo: Rc<[i32]> = Rc::new([1, 2, 3]); + assert_eq!(foo, foo.clone()); + } } |
