File: README.md

package info (click to toggle)
rust-iter-fixed 0.4.0-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 184 kB
  • sloc: makefile: 2; sh: 1
file content (61 lines) | stat: -rw-r--r-- 2,065 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 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 <https://github.com/rust-lang/rust/issues/80094#issuecomment-749260428>*

## Examples:
```rust
// 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`]

[`matrix.rs`]: source/examples/matrix.rs
[`vector.rs`]: source/examples/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.