13个版本

0.1.12 2023年10月28日
0.1.11 2023年9月7日
0.1.9 2023年8月4日
0.1.8 2023年7月11日
0.1.5 2022年12月7日

#503 in Rust模式

Download history 36/week @ 2024-04-14 26/week @ 2024-04-21 55/week @ 2024-04-28 32/week @ 2024-05-05 93/week @ 2024-05-12 42/week @ 2024-05-19 111/week @ 2024-05-26 63/week @ 2024-06-02 179/week @ 2024-06-09 127/week @ 2024-06-16 52/week @ 2024-06-23 4/week @ 2024-06-30 285/week @ 2024-07-07 95/week @ 2024-07-14 50/week @ 2024-07-21 92/week @ 2024-07-28

每月 522 次下载
用于 6 个crate(直接使用3个)

MIT 许可证

20KB
491

append-only-bytes

文档

如果一个数组是只增的,并且保证所有现有数据都是不可变的,我们可以在线程间安全地共享该数组的切片,同时所有者仍然可以安全地向其中追加新数据。

这是安全的,因为没有任何可变字节拥有多个所有者。如果追加新数据时空间不足,如果存在指向旧内存的ByteSlice引用,则AppendOnlyBytes不会释放旧内存。只有当所有指向旧内存的ByteSlice都已被丢弃时,旧内存才会被释放。

示例

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])

功能

  • serde:支持serde序列化和反序列化
  • u32_range:支持u32范围作为ByteSlices方法

依赖

~170KB