#sliding #iterator #adaptor #elements #copy #backing #non-copying

sliding_windows

a non-copying implementation of a sliding windows iterator adaptor

7 stable releases

Uses old Rust 2015

3.0.0 Jun 16, 2017
2.0.4 Jun 7, 2017
2.0.3 Mar 17, 2016
2.0.2 Feb 10, 2016
1.0.0 Nov 17, 2015

#1055 in Algorithms

Download history 83/week @ 2024-03-13 45/week @ 2024-03-20 35/week @ 2024-03-27 45/week @ 2024-04-03 29/week @ 2024-04-10 48/week @ 2024-04-17 77/week @ 2024-04-24 44/week @ 2024-05-01 45/week @ 2024-05-08 65/week @ 2024-05-15 110/week @ 2024-05-22 79/week @ 2024-05-29 80/week @ 2024-06-05 82/week @ 2024-06-12 84/week @ 2024-06-19 52/week @ 2024-06-26

305 downloads per month
Used in fuzzy_match

MIT license

19KB
325 lines

sliding_windows

This crate offers an Iterator adaptor, which yields "sliding windows" over the elements returned by the wrapped iterator.

It's worth to note that it does not copy elements, which makes the code relatively performant.

As a consequence it violates the Iterator protocol slightly. It is not possible to have two Windows into the data available at the same time. This is checked during runtime.

The backing storage is a Vec, so this Iterator adaptor is not ideal for very large windows (>20 elements or very huge elements).

I'd happily accept a PR to implement the same functionality with a VecDeque or similar, see this issue.

Install

Add this to your Cargo.toml.

[dependencies]
sliding_windows = "2.0"

Example

extern crate sliding_windows;
use sliding_windows::{IterExt, Storage};

let mut storage: Storage<u32> = Storage::new(3);

for x in (0..5).sliding_windows(&mut storage) {
    println!("{:?}", x);
}

// This outputs:
// [0, 1, 2]
// [1, 2, 3]
// [2, 3, 4]

For more examples please consult the Documentation.

This functionality in other languages/crates

No runtime deps