| Crates.io | bump-into |
| lib.rs | bump-into |
| version | 0.8.3 |
| created_at | 2020-02-19 21:29:36.931524+00 |
| updated_at | 2023-02-17 23:48:13.430196+00 |
| description | a no_std bump allocator sourcing space from a user-provided slice |
| homepage | |
| repository | https://codeberg.org/autumnontape/bump-into |
| max_upload_size | |
| id | 210717 |
| size | 61,382 |
A no_std bump allocator sourcing space from a user-provided mutable
slice rather than from a global allocator, making it suitable for use
in embedded applications and tight loops.
Values held in BumpInto allocations are never dropped. If they must
be dropped, you can use core::mem::ManuallyDrop::drop or
core::ptr::drop_in_place to drop them explicitly (and unsafely).
In safe code, you can allocate an Option and drop the value inside
by overwriting it with None.
use bump_into::{self, BumpInto};
// allocate 64 bytes of uninitialized space on the stack
let mut bump_into_space = bump_into::space_uninit!(64);
let bump_into = BumpInto::from_slice(&mut bump_into_space[..]);
// allocating an object produces a mutable reference with
// a lifetime borrowed from `bump_into_space`, or gives
// back its argument in `Err` if there isn't enough space
let number: &mut u64 = bump_into
.alloc_with(|| 123)
.ok()
.expect("not enough space");
assert_eq!(*number, 123);
*number = 50000;
assert_eq!(*number, 50000);
// slices can be allocated as well
let slice: &mut [u16] = bump_into
.alloc_n_with(5, core::iter::repeat(10))
.expect("not enough space");
assert_eq!(slice, &[10; 5]);
slice[2] = 100;
assert_eq!(slice, &[10, 10, 100, 10, 10]);
Copyright (c) 2020-22 autumnontape
This project may be reproduced under the terms of the MIT or the UPL 1.0 license, at your option. A copy of each license is included.