#vec #collection #different #storing #type #slice

no-std scratchbuffer

类似于 Vec 的数据结构,可以用作不同类型的切片

1 个不稳定发布

0.1.0-alpha.12023年1月14日

#1549 in 数据结构

MIT/Apache

11KB
206

scratchbuffer

Crates.io docs.rs license: MIT/Apache-2.0 Rust CI

ScratchBuffer<dyn Trait> 类似于 Vec<Box<dyn Trait>>,但通过使用多个较大的内存块并存储它们的指针在 Vec 中进行优化,避免了分配。这意味着项目可以随机访问,但可能不在连续的内存中。

示例

此示例在 ScratchBuffer 中存储多个值并访问它们。(push(...) 需要 "unstable" 功能(仅限 nightly 版本))

use scratchbuffer::ScratchBuffer;
let mut buf = ScratchBuffer::new();

// to use the scratchbuffer, you need to clear it, and tell which type you want to use
let mut u32buf = buf.clear_and_use_as::<u32>();
u32buf.push(123);
u32buf.push(456);
assert_eq!(&[123u32, 456], u32buf.as_slice());

// now use the scratchbuffer with a different type.
// in this case, no memory-allocations are needed, because the scratchbuffer
// can re-use the memory it has allocated for u32buf
let u16buf = buf.clear_and_use_as::<u16>();
u16buf.push(345);
u16buf.push(678);
assert_eq!(&[345u16, 678], u16buf.as_slice());

no_std

此包也应该可以在没有 std(使用 alloc)的情况下工作。无需额外配置。

许可证

此项目受以下其中之一许可协议的许可:

任选其一。

除非你明确表示,否则根据 Apache-2.0 许可证定义,你故意提交以包含在作品中的任何贡献,将按上述方式双许可,没有任何额外的条款或条件。

无运行时依赖