#byte-buffer #byte #queue #rotating

rotbuf

RotBuf 是围绕 Bytes crate 的 BytesMut 数据结构包装的 Queue 实现方式。

3个版本

0.0.3 2024年4月18日
0.0.2 2024年4月18日
0.0.1 2024年4月18日

#911 in 数据结构

Apache-2.0

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