#byte-buffer #byte-slice #byte #slice #buffer #ownership #sharing

byteloaf

通过独立拥有的、访问的和移动的切片来使用堆分配的字节缓冲区(一个'面包卷')

1个不稳定版本

0.2.0 2021年11月29日

#31 in #所有权

自定义许可证

12KB
240

字节面包卷 🍞

是什么

这个库允许将堆分配的字节缓冲区视为一个面包卷🍞;其内容可以被任意分割成切片,这些切片可以独立传递、访问和拥有。

具体来说,可以创建一个单部分面包卷,并像通常一样将其视为可变的字节缓冲区。

let x = LoafPart::new(5);
let slice = x.as_slice_mut();

slice.write_all(b"hello").unwrap();
assert_eq!(slice, b"hello");

slice[3] = b'Q';
assert_eq!(slice, b"helQo");

面包卷字节的拥有权可以通过分割现有部分进一步细分。

let y = x.split_at(3);
assert_eq!(x.as_slice(), b"hel"  );
assert_eq!(y.as_slice(),    b"lo");

对于拥有连续字节的面包卷部分,它们的拥有权细分可以被重新绘制,或合并成一个部分。

x.with_try_resplit_at(y, 0..4).unwrap();
assert_eq!(x.as_slice(), b"hell" );
assert_eq!(y.as_slice(),     b"o");
let z = x.with_try_join(y).unwrap();
assert_eq!(z.as_slice(), b"hello");

为什么

创建这个库是为了作为存储独立拥有的字节切片的实用工具,同时尽量减少堆分配的数量。例如,这对于保留发送的UDP数据报文的内容,直到其接收得到确认非常有用。

无运行时依赖