A strided slice type.
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.
```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 .. asserteq!(stride[0], 1); asserteq!(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]); ```
See the API documentation for more.
Licensed under either of
at your option.