13 releases
0.1.12 | Oct 28, 2023 |
---|---|
0.1.11 | Sep 7, 2023 |
0.1.9 | Aug 4, 2023 |
0.1.8 | Jul 11, 2023 |
0.1.5 | Dec 7, 2022 |
#1202 in Encoding
426 downloads per month
Used in 7 crates
(3 directly)
20KB
491 lines
append-only-bytes
Documentation
If an array is append-only and guarantees that all the existing data is immutable, we can safely share slices of this array across threads, while the owner can still safely append new data to it.
This is safe because no mutable byte has more than one owner. If there isn't enough capacity for a new append, AppendOnlyBytes
will not deallocate the old memory if a ByteSlice
is referring to it. The old memory will be deallocated only when all the ByteSlice
s referring to it are dropped.
Example
use append_only_bytes::{AppendOnlyBytes, BytesSlice};
let mut bytes = AppendOnlyBytes::new();
bytes.push_slice(&[1, 2, 3]);
let slice: BytesSlice = bytes.slice(1..);
bytes.push_slice(&[4, 5, 6]);
assert_eq!(&*slice, &[2, 3]);
assert_eq!(bytes.as_bytes(), &[1, 2, 3, 4, 5, 6])
Features
serde
: support serde serialization and deserializationu32_range
: supportu32
range forByteSlices
method
Dependencies
~160KB