Skip to content

Iterator of const known length

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

usbalbin/iter_fixed

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ef7beeb · Dec 2, 2024

History

36 Commits
Jul 23, 2024
Apr 20, 2021
Dec 2, 2024
Jun 13, 2024
Apr 17, 2021
Jun 23, 2024
Mar 1, 2021
Mar 1, 2021
Jul 23, 2024
Jul 23, 2024

Repository files navigation

Maintenance

crates.io docs.rs dependency status

Stable Nightly Miri

iter_fixed

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.

[IteratorFixed] provides on stable methods like map, inspect, enumerate, zip, rev, copied, cloned, with nightly skip, step_by, chain, take, flatten.

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

⚠️ Experimental

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

Origin

This project is inspired by @leonardo-m 's idea rust-lang/rust#80094 (comment)

Examples:

// simply reverse an Array
let rev_array: [_; 4] = [1, 3, 2, 7]
    .into_iter_fixed()
    .rev()
    .collect();
assert_eq!(rev_array, [7, 2, 3, 1]);

// .. and compute sum with values of a second array multiplied by 10
let sum_array: [_; 4] = rev_array
    .into_iter_fixed()
    .zip([4,1,3,7])
    .map(|(a, b)| a + (b * 10))
    .collect();
assert_eq!(sum_array, [47, 12, 33, 71]);

You can also take a look at examples : matrix.rs and vector.rs

Current version: 0.4.0

no_std

This crate should work without the full standard library

Some additional info here

License : MIT OR Apache-2.0

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.