No Description

Michael Buesch 5c7e157254 Update release script 1 month ago
.github eab9b82530 Add github action 1 month ago
maintenance 5c7e157254 Update release script 1 month ago
src e2a1f9148d Initial commit 5 months ago
.gitignore 5c7e157254 Update release script 1 month ago
Cargo.lock 5c7e157254 Update release script 1 month ago
Cargo.toml eab9b82530 Add github action 1 month ago
LICENSE-APACHE e2a1f9148d Initial commit 5 months ago
LICENSE-MIT e2a1f9148d Initial commit 5 months ago
README.md e2a1f9148d Initial commit 5 months ago

README.md

Iterator Peekable with multi-forward-peek and multi-backward-peek

Homepage

Git repository

Github repository

crates.io site

This is an Iterator Peekable similar to std::iter::Peekable, but with additional features:

  • Can peek multiple items forwards into the future.
  • Can peek multiple items backwards into the past.

This crate is #![no_std], does not heap-allocate and does not contain unsafe code.

The wrapped Iterator::Item must implement Clone.

Example usage


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.

Dependencies

  • This crate is #![no_std]. It does not allocate.
  • It only depends on the arraydeque crate without its feature std.

License

Copyright (c) 2024 Michael Büsch m@bues.ch

Licensed under the Apache License version 2.0 or the MIT license, at your option.