]> git.lizzy.rs Git - rust.git/commitdiff
std: simplify str::as_imm_buf and vec::as_{imm,mut}_buf
authorErick Tryzelaar <erick.tryzelaar@gmail.com>
Tue, 23 Jul 2013 19:31:00 +0000 (12:31 -0700)
committerErick Tryzelaar <erick.tryzelaar@gmail.com>
Tue, 23 Jul 2013 23:57:00 +0000 (16:57 -0700)
src/libstd/str.rs
src/libstd/vec.rs

index 95cbc5aa4097e12e2b051e8508fa66ec85c315d4..b869f574beb9bfd035ae3dd0583c693ec294ecbf 100644 (file)
@@ -1957,11 +1957,8 @@ fn subslice_offset(&self, inner: &str) -> uint {
      */
     #[inline]
     fn as_imm_buf<T>(&self, f: &fn(*u8, uint) -> T) -> T {
-        unsafe {
-            let v: *(*u8, uint) = cast::transmute(self);
-            let (buf, len) = *v;
-            f(buf, len)
-        }
+        let v: &[u8] = unsafe { cast::transmute(*self) };
+        v.as_imm_buf(f)
     }
 
     /**
index baeb87e51b9107dcf297244c8cbda60c10528a54..6bbf1210a31064bad3b6364ccc9e1f31943375b7 100644 (file)
@@ -1691,7 +1691,7 @@ fn mut_split(self, mid: uint) -> (&'self mut [T],
     unsafe fn unsafe_mut_ref(&self, index: uint) -> *mut T;
     unsafe fn unsafe_set(&self, index: uint, val: T);
 
-    fn as_mut_buf<U>(&self, f: &fn(*mut T, uint) -> U) -> U;
+    fn as_mut_buf<U>(self, f: &fn(*mut T, uint) -> U) -> U;
 }
 
 impl<'self,T> MutableVector<'self, T> for &'self mut [T] {
@@ -1783,12 +1783,9 @@ unsafe fn unsafe_set(&self, index: uint, val: T) {
 
     /// Similar to `as_imm_buf` but passing a `*mut T`
     #[inline]
-    fn as_mut_buf<U>(&self, f: &fn(*mut T, uint) -> U) -> U {
-        unsafe {
-            let v : *(*mut T,uint) = transmute(self);
-            let (buf,len) = *v;
-            f(buf, len / sys::nonzero_size_of::<T>())
-        }
+    fn as_mut_buf<U>(self, f: &fn(*mut T, uint) -> U) -> U {
+        let (buf, len): (*mut T, uint) = unsafe { transmute(self) };
+        f(buf, len / sys::nonzero_size_of::<T>())
     }
 
 }