1 个不稳定发布
0.1.0-alpha.1 | 2023年1月14日 |
---|
#1549 in 数据结构
11KB
206 行
scratchbuffer
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
)的情况下工作。无需额外配置。
许可证
此项目受以下其中之一许可协议的许可:
- MIT 许可证(《LICENSE-MIT》或 http://opensource.org/licenses/MIT》)
- Apache 许可证 2.0 版(《LICENSE-APACHE》或 http://apache.ac.cn/licenses/LICENSE-2.0”)
任选其一。
除非你明确表示,否则根据 Apache-2.0 许可证定义,你故意提交以包含在作品中的任何贡献,将按上述方式双许可,没有任何额外的条款或条件。