No Description

Michael Buesch 9e899f5182 Add release script 11 months ago
maintenance bffebda252 Add release script 11 months ago
src e2a1f9148d Initial commit 11 months ago
.gitignore e2a1f9148d Initial commit 11 months ago
Cargo.toml e2a1f9148d Initial commit 11 months ago
LICENSE-APACHE e2a1f9148d Initial commit 11 months ago
LICENSE-MIT e2a1f9148d Initial commit 11 months ago
README.md e2a1f9148d Initial commit 11 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.