2 releases
0.1.1 | Nov 25, 2021 |
---|---|
0.1.0 | Nov 25, 2021 |
#1751 in Data structures
54 downloads per month
Used in 3 crates
(2 directly)
9KB
180 lines
PinnedVec
Vec-like structure whose elements never move.
Normal Vec holds all its content in one contigious region, and moves when it needs to expand. PinnedVec holds several smaller sub-vector, each of which never moves. The first sub-vector is of capacity 1, the second 2, the third 4, the nth 2^(n-1).
Example Usage
use pinned_vec::PinnedVec;
use std::pin::Pin;
let mut v = PinnedVec::new();
v.push(5);
{
let r: Pin<&i32> = v.get(0).unwrap();
assert_eq!(*r, 5);
}
{
let r: Pin<&mut i32> = v.get_mut(0).unwrap();
assert_eq!(*r, 5);
}
assert_eq!(v.len(), 1);
v.pop();
v.push(7);
v.push(8);
v.replace(0, 6);
assert_eq!(*v.get(0).unwrap(), 6);
assert_eq!(*v.get(1).unwrap(), 8);
lib.rs
:
PinnedVec
Vec-like structure whose elements never move.
Normal Vec holds all its content in one contigious region, and moves when it needs to expand. PinnedVec holds several smaller sub-vector, each of which never moves. The first sub-vector is of capacity 1, the second 2, the third 4, the nth 2^(n-1).
Example Usage
use pinned_vec::PinnedVec;
use std::pin::Pin;
let mut v = PinnedVec::new();
v.push(5);
{
let r: Pin<&i32> = v.get(0).unwrap();
assert_eq!(*r, 5);
}
{
let r: Pin<&mut i32> = v.get_mut(0).unwrap();
assert_eq!(*r, 5);
}
assert_eq!(v.len(), 1);
v.pop();
v.push(7);
v.push(8);
v.replace(0, 6);
assert_eq!(*v.get(0).unwrap(), 6);
assert_eq!(*v.get(1).unwrap(), 8);