19 个版本 (9 个破坏性更新)

1.0.0 2020年10月4日
0.15.0 2023年9月15日
0.14.2 2023年7月28日
0.12.0 2023年1月19日
0.1.1 2019年6月25日

#85 in 数据结构

Download history 9827/week @ 2024-04-22 8633/week @ 2024-04-29 8858/week @ 2024-05-06 9147/week @ 2024-05-13 10086/week @ 2024-05-20 8045/week @ 2024-05-27 7856/week @ 2024-06-03 10173/week @ 2024-06-10 10107/week @ 2024-06-17 13120/week @ 2024-06-24 11726/week @ 2024-07-01 14274/week @ 2024-07-08 14482/week @ 2024-07-15 16915/week @ 2024-07-22 17857/week @ 2024-07-29 17921/week @ 2024-08-05

67,843 每月下载量
26 个crate中使用 (直接使用19个)

MIT 许可证

105KB
2.5K SLoC

Ringbuffer

Github Workflows Docs.rs Crates.io

ringbuffer crate 提供了在Rust中安全的固定大小循环缓冲区(ringbuffer)。

提供了三种类型的ringbuffer实现,API基本相似

类型 描述
AllocRingBuffer 在运行时在堆上分配的ringbuffer。此ringbuffer仍然是固定大小的。这需要alloc功能。
GrowableAllocRingBuffer 在运行时在堆上分配的ringbuffer。此ringbuffer可以按大小增长,并在内部实现为 alloc::VecDeque。这需要alloc功能。
ConstGenericRingBuffer 使用const generics在栈上分配的ringbuffer。

所有这些ringbuffer还实现了RingBuffer trait,以实现它们的共享API表面。

MSRV: Rust 1.59

用法

use ringbuffer::{AllocRingBuffer, RingBuffer};

fn main() {
    let mut buffer = AllocRingBuffer::with_capacity(2);

    // First entry of the buffer is now 5.
    buffer.push(5);

    // The last item we pushed is 5
    assert_eq!(buffer.back(), Some(&5));

    // Second entry is now 42.
    buffer.push(42);
    assert_eq!(buffer.peek(), Some(&5));
    assert!(buffer.is_full());

    // Because capacity is reached the next push will be the first item of the buffer.
    buffer.push(1);
    assert_eq!(buffer.to_vec(), vec![42, 1]);
}

功能

名称 默认 描述
alloc 禁用此功能可删除对alloc的依赖。禁用此功能将使 ringbuffer no_std

许可证

MIT许可证授权

无运行时依赖项