rename funtion bytes to alloca

avec
Avril 4 years ago
parent 5a5b4cc623
commit b0a52b992b
Signed by: flanchan
GPG Key ID: 284488987C31F630

@ -23,7 +23,7 @@ use std::{
mod ffi; mod ffi;
/// Allocate a runtime length byte buffer (uninitialised) on the stack. /// Allocate a runtime length uninitialised byte buffer on the stack, call `callback` with this buffer, and then deallocate the buffer.
/// ///
/// Call the closure with a stack allocated buffer of `MaybeUninit<u8>` on the caller's frame of `size`. The memory is popped off the stack regardless of how the function returns (unless it doesn't return at all.) /// Call the closure with a stack allocated buffer of `MaybeUninit<u8>` on the caller's frame of `size`. The memory is popped off the stack regardless of how the function returns (unless it doesn't return at all.)
/// ///
@ -61,7 +61,7 @@ mod ffi;
/// ## Inlining /// ## Inlining
/// In the absense of inlining LTO (which *is* enabled if possible), this funcion is entirely safe to inline without leaking the `alloca`'d memory into the caller's frame; however, the FFI wrapper call is prevented from doing so in case the FFI call gets inlined into this function call. /// In the absense of inlining LTO (which *is* enabled if possible), this funcion is entirely safe to inline without leaking the `alloca`'d memory into the caller's frame; however, the FFI wrapper call is prevented from doing so in case the FFI call gets inlined into this function call.
/// It is unlikely the trampoline to the `callback` closure itself can be inlined. /// It is unlikely the trampoline to the `callback` closure itself can be inlined.
pub fn bytes<T, F>(size: usize, callback: F) -> T pub fn alloca<T, F>(size: usize, callback: F) -> T
where F: FnOnce(&mut [MaybeUninit<u8>]) -> T where F: FnOnce(&mut [MaybeUninit<u8>]) -> T
{ {
let mut callback = ManuallyDrop::new(callback); let mut callback = ManuallyDrop::new(callback);
@ -106,7 +106,7 @@ mod tests {
#[should_panic] #[should_panic]
fn unwinding_over_boundary() fn unwinding_over_boundary()
{ {
super::bytes(120, |_buf| panic!()); super::alloca(120, |_buf| panic!());
} }
#[test] #[test]
fn with_alloca() fn with_alloca()
@ -114,7 +114,7 @@ mod tests {
use std::mem::MaybeUninit; use std::mem::MaybeUninit;
const SIZE: usize = 128; const SIZE: usize = 128;
let sum = super::bytes(SIZE, |buf| { let sum = super::alloca(SIZE, |buf| {
println!("Buffer size is {}", buf.len()); println!("Buffer size is {}", buf.len());
for (i, x) in (1..).zip(buf.iter_mut()) { for (i, x) in (1..).zip(buf.iter_mut()) {
@ -179,7 +179,7 @@ mod tests {
fn stackalloc_of_uninit_bytes_known(b: &mut Bencher) fn stackalloc_of_uninit_bytes_known(b: &mut Bencher)
{ {
b.iter(|| { b.iter(|| {
black_box(crate::bytes(SIZE, |b| {black_box(b);})); black_box(crate::alloca(SIZE, |b| {black_box(b);}));
}) })
} }
} }

Loading…
Cancel
Save