Expand description
A cell which can be unsafely initialized or interiorly mutated, but safely accessed.
This is mostly intended for use in statics. The cell is safe to access, but must be initialized before any access. There is no synchronization to ensure initialization is observed, so you should initialize at the beginning of the main function or using something like the ctor
crate.
Example
use init_cell::InitCell;
// SAFETY: We will initialize the cell before using it.
pub static MY_VAL: InitCell<Vec<i32>> = unsafe { InitCell::new() };
fn main() {
// SAFETY: Nothing is accessing the cell.
unsafe {
InitCell::init(&MY_VAL, vec![1, 2, 3]);
}
assert_eq!(MY_VAL.iter().sum::<i32>(), 6);
// The cell can be mutated, too, which drops the previous value.
unsafe {
InitCell::set(&MY_VAL, vec![4, 5, 6]);
}
assert_eq!(MY_VAL.iter().sum::<i32>(), 15);
}
Structs
- A one-time initialization cell.