#stack #array #memory-buffer #no-std

nightly no-std const-buffer

使用const generics在栈上分配的固定容量内存缓冲区

3个版本

0.1.2 2020年9月16日
0.1.1 2020年2月25日
0.1.0 2020年2月3日

#21 in #memory-buffer

MIT/Apache

38KB
437

const-buffer

crates.io docs.rs rustc version

使用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.0MIT许可证许可。任何源贡献都将以相同的方式进行双许可。

无运行时依赖