Skip to content

Commit

Permalink
std: simplify str::as_imm_buf and vec::as_{imm,mut}_buf
Browse files Browse the repository at this point in the history
  • Loading branch information
erickt committed Jul 23, 2013
1 parent 037a5b1 commit cced3c9
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 12 deletions.
7 changes: 2 additions & 5 deletions src/libstd/str.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1957,11 +1957,8 @@ impl<'self> StrSlice<'self> for &'self str {
*/
#[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)
}

/**
Expand Down
11 changes: 4 additions & 7 deletions src/libstd/vec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1691,7 +1691,7 @@ pub trait MutableVector<'self, 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] {
Expand Down Expand Up @@ -1783,12 +1783,9 @@ impl<'self,T> MutableVector<'self, T> for &'self mut [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>())
}

}
Expand Down

0 comments on commit cced3c9

Please sign in to comment.