9 releases

Uses new Rust 2021

0.3.1 Oct 31, 2021
0.3.0 Sep 9, 2021
0.2.2 Jul 30, 2021
0.2.1 May 26, 2021
0.1.3 Apr 21, 2021

#222 in Rust patterns

MIT/Apache

21KB
246 lines

iter_fixed

crates.io docs.rs dependency status

Stable Nightly Miri

This project is inspired by @leonardo-m 's idea https://github.com/rust-lang/rust/issues/80094#issuecomment-749260428

**This code is currently very experimental, type names, function names, trait bounds etc. are all very much subject to change.

Provides a type and traits for turning collections of fixed size, like arrays, into IteratorFixed which can be used a bit like an ordinary Iterator but with a compile time guaranteed length. This enables us to turn them back into collections of fixed size without having to perform unnecessary checks during run time.

Just like Iterator, IteratorFixed provides methods like:

Works on stable rust
Requires nightly compiler

however it does not and will never be able to support methods like filter or take_while which will affect the length during runtime.

no_std

This crate should work without the full standard library

Examples

Toy example

// zip together two arrays of length 4, turn the elements wise sums of the
// two middle elements into an array of size 2
let res: [_; 2] = [1, 2, 3, 4]
    .into_iter_fixed()
    .zip([4, 3, 2, 1])
    .map(|(a, b)| a + b)
    .skip::<1>()
    .take::<2>()
    .collect();

assert_eq!(res, [5, 5]);

Vector

see examples/vector.rs

Matrix

see examples/matrix.rs

License

iter_fixed is distributed under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE, and LICENSE-MIT for details.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in iter_fixed by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

No runtime deps

Features

  • nightly_features
a~a