1 个稳定版本
1.0.0 | 2024 年 5 月 15 日 |
---|
#624 在 Rust 模式
13KB
153 行
支持多向前查看和多向后查看的迭代器 Peekable
这是一个类似于 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