]> git.lizzy.rs Git - rust.git/commitdiff
Add Rc::from_mut
authorSteven Fackler <sfackler@gmail.com>
Sun, 17 Nov 2013 05:59:42 +0000 (21:59 -0800)
committerSteven Fackler <sfackler@gmail.com>
Sat, 23 Nov 2013 05:19:53 +0000 (21:19 -0800)
src/libstd/rc.rs

index 4cb2c79219482eb9e7c79029ce330b825ac5e662..24e7decfb8235296031dc15b0d9b28aa7be86ab5 100644 (file)
@@ -21,6 +21,7 @@
 use ops::Drop;
 use kinds::{Freeze, Send};
 use clone::{Clone, DeepClone};
+use mutable::Mut;
 
 struct RcBox<T> {
     value: T,
@@ -54,6 +55,16 @@ pub fn from_send(value: T) -> Rc<T> {
     }
 }
 
+impl<T: Freeze> Rc<Mut<T>> {
+    /// Construct a new reference-counted box from a `Mut`-wrapped `Freeze` value
+    #[inline]
+    pub fn from_mut(value: Mut<T>) -> Rc<Mut<T>> {
+        unsafe {
+            Rc::new_unchecked(value)
+        }
+    }
+}
+
 impl<T> Rc<T> {
     /// Unsafety construct a new reference-counted box from any value.
     ///
@@ -146,4 +157,10 @@ fn test_destructor() {
         let x = Rc::from_send(~5);
         assert_eq!(**x.borrow(), 5);
     }
+
+    #[test]
+    fn test_from_mut() {
+        let a = 10;
+        let _x = Rc::from_mut(Mut::new(&a));
+    }
 }