Crate init_array[−][src]
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
Option
s, initializing them all toNone
and then initializing each one toSome(computation())
. - Using a
Vec
and incrementally pushing items to it. - Using an array of
MaybeUninit
s, gradually initializing them and then transmuting the array. This requires usage ofunsafe
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:
init_array
to initialize a stack-based fixed-size array.init_boxed_array
to initialize a heap-allocated fixed-size array.init_boxed_slice
to initialize a heap-allocated dynamically-sized slice.
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.
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.
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. |