about summary refs log tree commit diff
path: root/src/liballoc
diff options
context:
space:
mode:
authorMarkus Westerlind <marwes91@gmail.com>2015-06-04 14:35:04 +0200
committerMarkus Westerlind <marwes91@gmail.com>2015-06-04 14:35:04 +0200
commit7f3ae0aa26d24100379ae0f3eef29916a32f4e79 (patch)
tree8ae8065cc3829df257e0f844ba16a5b41fcf56ce /src/liballoc
parent80d08a37b6215a59ecce042f36ad446c5357b543 (diff)
downloadrust-7f3ae0aa26d24100379ae0f3eef29916a32f4e79.tar.gz
rust-7f3ae0aa26d24100379ae0f3eef29916a32f4e79.zip
Added AsRef implementations for Arc and Rc
Diffstat (limited to 'src/liballoc')
-rw-r--r--src/liballoc/arc.rs9
-rw-r--r--src/liballoc/rc.rs10
2 files changed, 19 insertions, 0 deletions
diff --git a/src/liballoc/arc.rs b/src/liballoc/arc.rs
index 593ecc72d50..d12d28335dd 100644
--- a/src/liballoc/arc.rs
+++ b/src/liballoc/arc.rs
@@ -332,6 +332,15 @@ impl<T: ?Sized> Deref for Arc<T> {
     }
 }
 
+#[stable(feature = "rc_arc_as_ref", since = "1.2.0")]
+impl<T: ?Sized> AsRef<T> for Arc<T> {
+
+    #[inline]
+    fn as_ref(&self) -> &T {
+        &self.inner().data
+    }
+}
+
 impl<T: Clone> Arc<T> {
     /// Make a mutable reference from the given `Arc<T>`.
     ///
diff --git a/src/liballoc/rc.rs b/src/liballoc/rc.rs
index 44f4a6a6290..906a41a4d53 100644
--- a/src/liballoc/rc.rs
+++ b/src/liballoc/rc.rs
@@ -156,6 +156,7 @@ use std::boxed;
 use core::cell::Cell;
 use core::clone::Clone;
 use core::cmp::{PartialEq, PartialOrd, Eq, Ord, Ordering};
+use core::convert::AsRef;
 use core::default::Default;
 use core::fmt;
 use core::hash::{Hasher, Hash};
@@ -379,6 +380,15 @@ impl<T: ?Sized> Deref for Rc<T> {
     }
 }
 
+#[stable(feature = "rc_arc_as_ref", since = "1.2.0")]
+impl<T: ?Sized> AsRef<T> for Rc<T> {
+
+    #[inline(always)]
+    fn as_ref(&self) -> &T {
+        &self.inner().value
+    }
+}
+
 #[stable(feature = "rust1", since = "1.0.0")]
 impl<T: ?Sized> Drop for Rc<T> {
     /// Drops the `Rc<T>`.