Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/zxch3n/append-only-bytes


https://github.com/zxch3n/append-only-bytes

Last synced: 2 months ago
JSON representation

Awesome Lists containing this project

README

        



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

```rust
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 deserialization
- `u32_range`: support `u32` range for `ByteSlices` method