Crate init_array

Source
Expand description

A library for initializing arrays itemwise.

Normally, when using fixed size arrays, you can only initialize them with a const value. Example:

// Literals work.
let arr = [0; 5];

// Const values work too.
const STRING: String = String::new();
let arr = [STRING; 5];
// Function calls don't work.
let arr = [computation(); 5];

there are a few different ways of initializing an array itemwise, including:

  • Using an array of Options, initializing them all to None and then initializing each one to Some(computation()).
  • Using a Vec and incrementally pushing items to it.
  • Using an array of MaybeUninits, gradually initializing them and then transmuting the array. This requires usage of unsafe code.

This crate uses the third method but hides it behind a safe interface, so that no unsafe code is needed on the User end. It provides three functions to initialize arrays itemwise:

There is also a try_init_array function which allows to initialize an array fallibly and return the error early.

If you have the nightly feature enabled, you will have access to additional versions of the init_boxed_... functions compliant with the new Allocator API.

If you turn off the alloc feature, which is enabled by default, you can use this crate in a #[no_std] context without an allocator. The crate is fully #[no_std] compatible.

In addition to the 3 functions mentioned above, there are also two extension traits provided, ArrayExt and SliceExt, which provide the same functionality as the free functions.

All of these functions share the property that, if the initialization of any item panics (i.e. if the stack unwinds), all the already initialized items are dropped, minimizing the risk of a memory leak.

Traits§

ArrayExt
Extension trait for constant sized arrays.
SliceExt
Extension trait for dynamically sized slices.

Functions§

init_array
Initialize a fixed-sized stack-based array.
init_boxed_array
Initialize a fixed-sized heap-allocated array.
init_boxed_slice
Initialize a dynamically-sized heap-allocated slice.
init_slice
Initialize all the elements in the slice with the result of calling the function with the index in the slice.
try_init_array
Does the same as init_array but supports early return for fallible initialization of fixed size arrays.
try_init_slice
Try to initialize all the elements in a slice, returning early if it fails.