Expand description
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()
to construct a&Stride<T, S>
that wraps a&[T]
.::new_mut()
to construct a&mut Stride<T, S>
that wraps a&mut [T]
.
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]);
Structs§
Traits§
- Stride
Index - A helper trait used for indexing operations.