Expand description
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 https://github.com/rust-lang/rust/issues/80094#issuecomment-749260428
§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
Structs§
- Iterator
Fixed - Iterator of fixed size
Traits§
- From
Iterator Fixed - Conversion from an
IteratorFixed
. - Into
Iterator Fixed - Conversion into an
IteratorFixed
.
Functions§
- from_fn
- Creates a new iterator of fixed size where each iteration calls the provided closure F: FnMut(usize) -> T