diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index aed98f3573e71..697bfe63b189b 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -2145,6 +2145,20 @@ pub mod raw { f(*v) } + /** + * Form a slice from a pointer and length (as a number of units, + * not bytes). + */ + #[inline(always)] + pub unsafe fn mut_buf_as_slice(p: *mut T, + len: uint, + f: &fn(v: &mut [T]) -> U) -> U { + let pair = (p, len * sys::nonzero_size_of::()); + let v : *(&blk/mut [T]) = + ::cast::reinterpret_cast(&addr_of(&pair)); + f(*v) + } + /** * Unchecked vector indexing. */