4 releases (2 breaking)
0.3.1 | Jan 4, 2023 |
---|---|
0.3.0 | Jan 3, 2023 |
0.2.0 | Jan 7, 2022 |
0.1.0 | Jan 7, 2022 |
#809 in Data structures
26 downloads per month
Used in pulz-schedule
24KB
502 lines
tinybox
TinyBox
is like Box
, but with an optimization that avoids allocations for small data-structures. This works by storing the value-bits inside the box itself, when the data-structure fits inside a pointer. This is especially usefull for dynamically sized types like traits.
Example
This example stores a value inside the TinyBox
without requireing an allocation.
use tinybox::TinyBox;
let boxed = TinyBox::new(1234usize);
assert_eq!(1234, *boxed)
This looks not very usefull, because the value can be stored inside a usize
variable without TinyBox
. Here is an more useful example that uses dyn-traits. The tinybox!
macro is used to coerce the value to a dyn-trait in stable-rust.
use std::any::{Any,TypeId};
use tinybox::{tinybox, TinyBox};
let boxed: TinyBox<dyn Any> = tinybox!(dyn Any => 1234usize);
assert_eq!(TypeId::of::<usize>(), (*boxed).type_id());
assert_eq!(1234, *boxed.downcast::<usize>().unwrap());
no_std
This crate should also work without std
. No additional configuration required.
License
This repository is licensed under either of
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.