3个版本
0.0.3 | 2024年4月18日 |
---|---|
0.0.2 | 2024年4月18日 |
0.0.1 | 2024年4月18日 |
#911 in 数据结构
18KB
307 行
旋转缓冲区 (RotBuf)
使用 Bytes
crate 的 BufferMut 实现的动态大小 Queue。RotatingBuffer 允许用户在字节缓冲区中存储有序字节,而不需要将数据向下移动缓冲区。
要开始使用,你可以很容易地创建一个 RotatingBuffer
,只需要知道最大大小。目前没有实现调整大小,但将来可能会实现,所以请明智地选择大小。
use rotbuf::RotatingBuffer;
fn create_rotating_buffer() -> RotatingBuffer {
RotatingBuffer::new(10)
}
入队和出队
使用 RotatingBuffer
的最简单方法是将其视为队列,一次入队和出队一个字节。
enqueue
非常简单,只需提供任何 u8
(表示单个字节的最佳方式)。
dequeue
返回一个 Option
,包含 Some 中的最前面的字节,或者,如果为空,则 None。
rb = RotatingBuffer::new(10);
rb.enqueue(50)?
match rb.dequeue() {
Some(value) => println!("Look, we dequeued something: {}", value),
None => println!("Womp womp, we were empty."),
}
enqueue
在大多数情况下将返回一个空的 [Ok],表示成功。如果达到 RotatingBuffer 的容量,它将返回一个包含 RotatingBufferAtCapacity 的 Err。
match rb.enqueue(50) {
Ok(()) => println!("The value was enqueued"),
Err(err) => println!("Oh no we must be at capacity: {}", err)
}
RotatingBufferAtCapacity 是一个错误,但您可以使用 reclaim
fn 恢复提供的值。
match rb.enqueue(50) {
Ok(()) => println!("The value was enqueued"),
Err(err) => println!("Oh no we couldn't enqueue this byte: {}", err.reclaim())
}
依赖关系
~175KB