1 个不稳定版本

0.1.0 2022 年 12 月 7 日

#17 in #mutability

MIT 许可证

8KB
157 行代码(不包括注释)

MQueue

支持迭代时修改的简单 FIFO 队列。

通用用法

这是使用 MQueue 的最简单方式。

    let mut queue = WorkQueue::<i32>::create();
    let mut sum = 0;
    queue.add(1);
    queue.add(2);
    queue.add(3);

    while let Some(data) = queue.next_value() {
        sum += data;
    }

    assert_eq!(sum, 6);

循环将继续提供项目,直到达到末尾。请注意,可以使用替代函数 next_ref 来获取对象的引用,而不是它的 clone。如您所见,项目可以在循环中入队。无论您使用 next_ref 还是 next_value,队列都可以在循环中进行修改。

    let mut queue = WorkQueue::<i32>::create();
    let mut sum = 0;
    queue.add(1);
    queue.add(2);
    queue.add(3);

    while let Some(data) = queue.next_ref() {
        sum += data;
        if sum == 6 {
            queue.add(4);
        }
    }

清理

MQueue 通过保持当前索引来工作,这意味着元素会保留在内存中,直到手动使用 clean() 清除。当您完成使用或在任何有意义的点上手动清理队列。此操作为 O(n),而访问当前或下一个为 O(1)。您可以通过调用 dirty_count() 来获取已消耗但未清理的项目数量。

剩余

您可以通过调用 queue.remaining() 来访问剩余项目的数量。这返回一个 usize

无运行时依赖