#stack #no-std #data #helper #buffer #structure

no-std rotating-buffer

一个小的辅助数据结构,允许保留未使用的数据

1 个不稳定版本

0.2.0 2021年6月15日

#219#data-structure

GPL-3.0 许可证

8KB

旋转缓冲区

…是一个小的辅助数据结构,允许在保持无法立即处理的数据的同时重用栈分配的缓冲区。

示例

use rotating_buffer::*;
let mut buf = RotatingBuffer::<u8, 4>::new();

buf.get_append_only().copy_from_slice(&[1, 2, 3, 4]);
buf.add_len(4);
assert_eq!(&[1, 2, 3, 4], buf.as_slice());

buf.rotate_right_and_resize_at(3);
assert_eq!(&[4], buf.as_slice());

assert_eq!(3, buf.get_append_only().len());
buf.get_append_only().copy_from_slice(&[5, 6, 7]);
buf.add_len(3);
assert_eq!(&[4, 5, 6, 7], buf.as_slice());

buf.rotate_right_and_resize_at(4);
assert_eq!(buf.as_slice().len(), 0);

灵感来源于Recurse Center的配对会议👩‍💻🐙 Recurse Center


lib.rs:

旋转缓冲区

…是一个小的辅助数据结构,允许在保持无法立即处理的数据的同时重用栈分配的缓冲区。

示例

use rotating_buffer::*;
let mut buf = RotatingBuffer::<u8, 4>::new();

buf.get_append_only().copy_from_slice(&[1, 2, 3, 4]);
buf.add_len(4);
assert_eq!(&[1, 2, 3, 4], buf.as_slice());

buf.rotate_right_and_resize_at(3);
assert_eq!(&[4], buf.as_slice());

assert_eq!(3, buf.get_append_only().len());
buf.get_append_only().copy_from_slice(&[5, 6, 7]);
buf.add_len(3);
assert_eq!(&[4, 5, 6, 7], buf.as_slice());

buf.rotate_right_and_resize_at(4);
assert_eq!(buf.as_slice().len(), 0);

更深入的示例请参见 examples/read_to_eof.rs

灵感来源于Recurse Center的配对会议👩‍💻🐙 Recurse Center

无运行时依赖