1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
//! Dynamic data structures that do not require a global allocator. //! //! The most directly useful might be a local `FixedVec` that requires its element to be neither //! `Clone`, `Copy` nor `Default` but is simply a normal vector on a locally borrowed chunk of raw //! memory. For this we will use the `Bump` allocator of [`static-alloc`] which loan us memory from //! the stack and cleans up by leaving the scope without requiring explicit deallocation. Sort of //! like `alloca` but safe and pretty. //! //! [`static-alloc`]: https://crates.io/crates/static-alloc //! //! ```rust //! use static_alloc::Bump; //! use without_alloc::{FixedVec, alloc::LocalAllocLeakExt}; //! //! let mut pool: Bump<[usize; 16]> = Bump::uninit(); //! // Allocate a vector with capacity of 16 from the slab. //! let mut vector = pool.fixed_vec(16).unwrap(); //! //! let mut num = 0; //! // Push a mutable reference, not `Copy` nor `Clone`! //! vector.push(&mut num); //! //! *vector.pop().unwrap() = 4; //! drop(vector); //! //! assert_eq!(num, 4); //! ``` // Copyright 2019 Andreas Molzer #![no_std] #![deny(missing_docs)] pub mod alloc; pub mod boxed; pub mod rc; pub mod uninit; pub mod fixed_vec; pub use boxed::Box; pub use fixed_vec::FixedVec; pub use uninit::Uninit;