Crates.io | nested |
lib.rs | nested |
version | 0.1.1 |
source | src |
created_at | 2017-12-29 04:45:54.334046 |
updated_at | 2020-03-14 06:31:19.017698 |
description | A memory efficient container for nested collections (like `Vec |
homepage | |
repository | https://github.com/tafia/nested |
max_upload_size | |
id | 44785 |
size | 19,326 |
A memory efficient container for nested collections.
This crate is intended to be used when:
Vec<String>
Vec<Vec<T>>
Vec<C>
where C
is heap allocated, dynamically sized and can implement Collection
trait&[T]
or &str
)Instead of having n + 1 allocations, you'll only have 2.
use nested::Nested;
let mut v = Nested::<String>::new();
// you can either populate it one by one
v.push("a");
v.push("bb".to_string());
v.push("hhh");
v.extend(vec!["iiiiii".to_string(), "jjjj".to_string()]);
assert_eq!(v.len(), 5);
assert_eq!(&v[0], "a");
assert_eq!(&v[1], "bb");
// or you can directly collect it
let mut v = ["a", "b", "c", "d", "e", "f", "g"].iter().collect::<Nested<String>>();
assert_eq!(v.len(), 7);
// it also provides basic operations
let u = v.split_off(2);
assert_eq!(u.get(0), Some("c"));
v.truncate(1);
assert_eq!(v.pop(), Some("a".to_string()));
assert_eq!(v.pop(), None);
See benches directory.
Here are the benches for collecting all words in src/lib.rs file:
test bench_nested_string ... bench: 55,381 ns/iter (+/- 7,852)
test bench_nested_string_iter ... bench: 95,127 ns/iter (+/- 8,253)
test bench_vec_string ... bench: 117,203 ns/iter (+/- 13,089)
test bench_vec_string_iter ... bench: 142,245 ns/iter (+/- 24,701)
MIT