stride 0.4.1

A strided slice type
Documentation
<!-- Generated by cargo-onedoc v0.3.2. DO NOT EDIT. -->

# stride

[![Crates.io Version](https://badgers.space/crates/version/stride)](https://crates.io/crates/stride)
[![Docs.rs Latest](https://badgers.space/badge/docs.rs/latest/blue)](https://docs.rs/stride)
[![Build Status](https://badgers.space/github/checks/rossmacarthur/vectrix?label=build)](https://github.com/rossmacarthur/vectrix/actions/workflows/build.yaml)

This crate provides a slice-like `Stride<T, S>` type where elements are
spaced a constant `S` elements in memory.

For example, given an underlying slice `&[1, 2, 3, 4, 5, 6]`, the elements
`&[1, 3, 5]` are a strided slice with a stride of 2. This crate makes use of
const generics to provide the stride value `S` at compile time so that there
is no runtime memory overhead to strided slices; `Stride` takes up the same
amount of space as a slice.

Many slice-like operations are implemented for `Stride` including iteration
and indexing. Method names are similar to those of the slice type.

Where you want a strided slice use:

- `::new()``Stride::new` to construct a `&Stride<T, S>``Stride` that
  wraps a `&[T]``slice`.
- `::new_mut()``Stride::new_mut` to construct a
  `&mut Stride<T, S>``Stride` that wraps a `&mut [T]``slice`.

```rust
use stride::Stride;

// The underlying data.
let data = &mut [1, 2, 7, 4, 5, 6];

// Create a strided slice with a stride of `2` referring to
// elements `1`, `7`, and `5`.
let stride = Stride::<_, 2>::new_mut(data);

assert_eq!(stride.len(), 3);

// We can use indexing to view values ..
assert_eq!(stride[0], 1);
assert_eq!(stride[1..3], &[7, 5]);

// .. or modify them.
stride[1] = 3;
assert_eq!(stride, &[1, 3, 5]);
assert_eq!(data, &[1, 2, 3, 4, 5, 6]);
```

## 🦀 MSRV

This crate supports Rust 1.83 and above.

## License

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

See [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT) for details.