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数据报文的内容,直到其接收得到确认非常有用。