#带子 #迭代器 #项目 #机器 #波段 #预览 #案例

ribbon

迭代器的带子机器,用于通过窗口查看

10 个版本 (6 个破坏性更新)

0.7.0 2023 年 10 月 7 日
0.6.0 2023 年 10 月 7 日
0.5.0 2023 年 10 月 7 日
0.4.0 2023 年 10 月 7 日
0.1.0 2023 年 9 月 24 日

#1394 in 算法

Download history 3/week @ 2024-04-03

63 次每月下载

Apache-2.0

30KB
515

Build CI Documentation Crates

Ribbon - 迭代器的带子

Ribbon旨在提供 API 以保存(并因此使可用)迭代器返回的一些项目。

这适用于使用迭代器方便,但需要了解迭代器返回的项目的一些上下文的情况。当需要预览时(在决定如何处理当前项目之前,我们需要知道接下来出现的值),这特别有用。

此 crate 提供了两种实现 Ribbon 特性的类型

  • Tape:一种动态大小的 Ribbon,可以保存可变数量的项目,并且可以根据需要增长和缩小。它由 VecDeque 支持,并在堆上分配内存(这是动态大小集合的常规做法)
  • Band:一种固定大小的 Ribbon,由 N 元素的数组支持。它不能超过给定的固定长度,并且在没有可用空间时将删除第一个元素。

示例

使用 Tape

use ribbon::Tape;

let mut tape = Tape::new(0..10);
tape.expand_n(5);

assert_eq!(tape.len(), 5);
assert_eq!(tape.peek_front(), Some(&0));
assert_eq!(tape.peek_back(), Some(&4));

使用 Band

use ribbon::Band;
use ribbon::Ribbon;

// Band with capacity for 5 items
let mut band: Band<3, _, _> = Band::new(0..4);
band.expand_n(2); // consume 0, 1 from iterator

assert_eq!(band.len(), 2);
assert_eq!(band.peek_front(), Some(&0));
assert_eq!(band.peek_back(), Some(&1));

// "slides" over the items from iterator -> returns first and expands by 1
assert_eq!(band.progress(), Some(0)); // consume 3 from iterator
assert_eq!(band.progress(), Some(1)); // consumes 4 from iterator, iterator has no more values

// iterator does not produce more values, progress becomes no-op.
assert_eq!(band.progress(), None);

无运行时依赖项