#iterator #peek #nth #multipeek

无 std peekable-fwd-bwd

支持多向前查看和多向后查看的迭代器 Peekable

1 个稳定版本

1.0.0 2024 年 5 月 15 日

#624Rust 模式

MIT/Apache

13KB
153

支持多向前查看和多向后查看的迭代器 Peekable

主页

Git 仓库

GitHub 仓库

crates.io 网站

这是一个类似于 std::iter::Peekable 的迭代器 Peekable,但具有额外功能

  • 可以向前查看多个未来的项目。
  • 可以向后查看多个过去的项目。

此 crate 是 #![no_std],不进行堆分配且不包含 unsafe 代码。

包装的 Iterator::Item 必须实现 Clone

示例用法


use peekable_fwd_bwd::Peekable;
use core::slice::Iter;

let array = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25];

const BWD_SIZE: usize = 2; // size of backward peek buffer.
const FWD_SIZE: usize = 8; // size of forward peek buffer.

let mut iter = Peekable::<Iter<i32>, BWD_SIZE, FWD_SIZE>::new(&array);

assert_eq!(iter.next(), Some(&10));
assert_eq!(iter.next(), Some(&11));

// forward peek into the future.
assert_eq!(iter.peek(), Some(&&12));
assert_eq!(iter.peek_nth(0), Some(&&12));
assert_eq!(iter.peek_nth(1), Some(&&13));
assert_eq!(iter.peek_nth(8), None); // FWD_SIZE too small.

assert_eq!(iter.next(), Some(&12));

// backward peek into the past.
assert_eq!(iter.peek_bwd(), Some(&&12));
assert_eq!(iter.peek_bwd_nth(0), Some(&&12));
assert_eq!(iter.peek_bwd_nth(1), Some(&&11));
assert_eq!(iter.peek_bwd_nth(2), None); // BWD_SIZE too small.

依赖项

  • 此 crate 是 #![no_std]。它不进行分配。
  • 它仅依赖于 arraydeque crate,但不使用其 std 功能。

许可证

版权所有 (c) 2024 Michael Büsch [email protected]

许可协议为 Apache License 2.0 或 MIT 许可证,任选其一。

依赖项

~100KB