Function bip::map_in_place
[−]
[src]
pub fn map_in_place<T, U, F>(x: Box<T>, f: F) -> Box<U> where F: FnOnce(T) -> U
Execute f
on the data in x
, replacing the output into the same
allocation.
This is semantically equivalent to Box::new(f(*x))
, but avoids
the allocation by reusing the memory of x
directly. map
will
not cause unsafety or leak memory if f
panics.
T
and U
must have the same size, and the alignment (measured
by std::mem::min_align_of
) of T
must be at least as large as
that of U
. A violation of either of these requirements will
result in a runtime panic.
Example
let x = Box::new(1_i32); let address = &*x as *const _ as usize; let new_x = bip::map_in_place(x, |a| a as f32 + 1.0); assert_eq!(*new_x, 2.0); assert_eq!(address, &*new_x as *const _ as usize);