Crates.io | peekable-fwd-bwd |
lib.rs | peekable-fwd-bwd |
version | 1.0.0 |
source | src |
created_at | 2024-05-15 20:15:21.997457 |
updated_at | 2024-05-15 20:15:21.997457 |
description | Iterator Peekable with multi-forward-peek and multi-backward-peek |
homepage | https://bues.ch/ |
repository | https://github.com/mbuesch/peekable-fwd-bwd |
max_upload_size | |
id | 1241466 |
size | 40,137 |
This is an Iterator Peekable similar to std::iter::Peekable
, but with additional features:
This crate is #![no_std]
, does not heap-allocate and does not contain unsafe
code.
The wrapped Iterator::Item
must implement 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.
This crate is #![no_std]
. It does not allocate.
It only depends on the arraydeque crate without its feature std
.
Copyright (c) 2024 Michael Büsch m@bues.ch
Licensed under the Apache License version 2.0 or the MIT license, at your option.