1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
use core::{mem::MaybeUninit, ptr}; /// Creates an array `[T; N]` where each array element `T` is returned by the `cb` call. #[inline] pub fn create_array<F, T, const N: usize>(mut cb: F) -> [T; N] where F: FnMut(usize) -> T, { unsafe { let mut array: MaybeUninit<[T; N]> = MaybeUninit::uninit(); for (idx, value_ptr) in (&mut *array.as_mut_ptr()).iter_mut().enumerate() { ptr::write(value_ptr, cb(idx)); } array.assume_init() } }