3个版本
0.1.2 | 2020年9月16日 |
---|---|
0.1.1 | 2020年2月25日 |
0.1.0 | 2020年2月3日 |
#21 in #memory-buffer
38KB
437 行
const-buffer
使用const generics在栈上分配的固定容量内存缓冲区。
这是一个底层实用工具,用于实现固定容量向量、环形缓冲区等高级数据结构。由于ConstBuffer
的主要目的是在之上构建安全抽象,其几乎全部API接口都是unsafe
。
ConstBuffer
不会跟踪哪些元素处于初始化状态。此外,为了确保最佳性能,除非启用调试断言,否则不会执行边界检查。任何对此crate的误用都会导致未定义行为。
示例用法
use const_buffer::ConstBuffer;
fn main() {
let mut buffer = ConstBuffer::<u32, 10>::new();
unsafe {
buffer.copy_from_slice(2, &[10, 20, 30]);
// [_, _, 10, 20, 30, _, _, _, _, _]
buffer.write(5, 40);
// [_, _, 10, 20, 30, 40, _, _, _, _]
assert_eq!(buffer.get(3), &20);
assert_eq!(buffer.get(2..6), &[10, 20, 30, 40]);
buffer.copy_within(2..6, 0);
// [10, 20, 30, 40, 30, 40, _, _, _, _]
buffer.get_mut(1..4).reverse();
// [10, 40, 30, 20, 30, 40, _, _, _, _]
assert_eq!(buffer.get(..6), &[10, 40, 30, 20, 30, 40]);
buffer.swap(3, 8);
// [10, 40, 30, _, 30, 40, _, _, 20, _]
assert_eq!(buffer.read(8), 20);
}
}
许可证
在您的选择下,根据Apache License,版本2.0或MIT许可证许可。任何源贡献都将以相同的方式进行双许可。