Skip to content

Commit

Permalink
migrate to use cargo-readme
Browse files Browse the repository at this point in the history
- Add README.tpl
- generate REAME.md with cargo-readme
  • Loading branch information
gwen-lg committed Jun 18, 2024
1 parent a19d091 commit a4e6ad4
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 43 deletions.
80 changes: 37 additions & 43 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# iter_fixed
![Maintenance](https://img.shields.io/badge/maintenance-experimental-blue.svg)

[![crates.io](https://img.shields.io/crates/v/iter_fixed.svg)](https://crates.io/crates/iter_fixed)
[![docs.rs](https://docs.rs/iter_fixed/badge.svg)](https://docs.rs/iter_fixed/)
Expand All @@ -8,70 +8,64 @@
![Nightly](https://github.com/usbalbin/iter_fixed/actions/workflows/nightly.yml/badge.svg)
![Miri](https://github.com/usbalbin/iter_fixed/actions/workflows/miri.yml/badge.svg)

*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.
# 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
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`](https://doc.rust-lang.org/std/iter/trait.Iterator.html), [`IteratorFixed`](https://docs.rs/iter_fixed/latest/iter_fixed/struct.IteratorFixed.html) provides methods like:

###### Works on stable rust
* [`map`](https://docs.rs/iter_fixed/latest/iter_fixed/struct.IteratorFixed.html#method.map)
* [`inspect`](https://docs.rs/iter_fixed/latest/iter_fixed/struct.IteratorFixed.html#method.inspect)
* [`enumerate`](https://docs.rs/iter_fixed/latest/iter_fixed/struct.IteratorFixed.html#method.enumerate)
* [`zip`](https://docs.rs/iter_fixed/latest/iter_fixed/struct.IteratorFixed.html#method.zip)
* [`rev`](https://docs.rs/iter_fixed/latest/iter_fixed/struct.IteratorFixed.html#method.rev)
* [`copied`](https://docs.rs/iter_fixed/latest/iter_fixed/struct.IteratorFixed.html#method.copied)
* [`cloned`](https://docs.rs/iter_fixed/latest/iter_fixed/struct.IteratorFixed.html#method.cloned)

###### Requires nightly compiler
* [`skip`](https://docs.rs/iter_fixed/latest/iter_fixed/struct.IteratorFixed.html#method.skip)
* [`step_by`](https://docs.rs/iter_fixed/latest/iter_fixed/struct.IteratorFixed.html#method.step_by)
* [`chain`](https://docs.rs/iter_fixed/latest/iter_fixed/struct.IteratorFixed.html#method.chain)
* [`take`](https://docs.rs/iter_fixed/latest/iter_fixed/struct.IteratorFixed.html#method.take)
* [`flatten`](https://docs.rs/iter_fixed/latest/iter_fixed/struct.IteratorFixed.html#method.flatten)
[`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.

## no_std

This crate should work without the full standard library
However it does not and will never be able to support methods like
`filter` or `take_while` which will affect the length during runtime.

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

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

## Examples:
```rust
// 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]
// simply reverse an Array
let rev_array: [_; 4] = [1, 3, 2, 7]
.into_iter_fixed()
.zip([4, 3, 2, 1])
.map(|(a, b)| a + b)
.skip::<1>()
.take::<2>()
.rev()
.collect();
assert_eq!(rev_array, [7, 2, 3, 1]);

assert_eq!(res, [5, 5]);
// .. 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]);
```

## Vector
see [examples/vector.rs](https://github.com/usbalbin/iter_fixed/blob/master/examples/vector.rs)
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


## Matrix
Current version: 0.3.1

## no_std

This crate should work without the full standard library

see [examples/matrix.rs](https://github.com/usbalbin/iter_fixed/blob/master/examples/matrix.rs)
Some additional info here

# License
# 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
## 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.
30 changes: 30 additions & 0 deletions README.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{{badges}}

[![crates.io](https://img.shields.io/crates/v/iter_fixed.svg)](https://crates.io/crates/iter_fixed)
[![docs.rs](https://docs.rs/iter_fixed/badge.svg)](https://docs.rs/iter_fixed/)
[![dependency status](https://deps.rs/crate/iter_fixed/0.3.0/status.svg)](https://deps.rs/crate/iter_fixed/0.3.0)

![Stable](https://github.com/usbalbin/iter_fixed/actions/workflows/stable.yml/badge.svg)
![Nightly](https://github.com/usbalbin/iter_fixed/actions/workflows/nightly.yml/badge.svg)
![Miri](https://github.com/usbalbin/iter_fixed/actions/workflows/miri.yml/badge.svg)

# {{crate}}

{{readme}}

Current version: {{version}}

## no_std

This crate should work without the full standard library

Some additional info here

# License : {{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.

0 comments on commit a4e6ad4

Please sign in to comment.