Struct strided::Stride
[-] [+]
[src]
pub struct Stride<'a, T: 'a> { // some fields omitted }
A shared strided slice. This is equivalent to a &[T]
that only
refers to every n
th T
.
Methods
impl<'a, T> Stride<'a, T>
fn new(x: &'a [T]) -> Stride<'a, T>
Creates a new strided slice directly from a conventional slice. The return value has stride 1.
fn len(&self) -> usize
Returns the number of elements accessible in self
.
fn stride(&self) -> usize
Returns the offset between successive elements of self
as a
count of elements, not bytes.
fn as_ptr(&self) -> *const T
Returns a pointer to the first element of this strided slice.
NB. one must be careful since only every self.stride()
th
element is guaranteed to have unique access via this object;
the others may be under the control of some other strided
slice.
fn substrides2(&self) -> (Stride<'a, T>, Stride<'a, T>)
Breaks this strided slice into two strided slices pointing to alternate elements.
That is, it doubles the stride and (approximately) halves the
length. A slice pointing to values [1, 2, 3, 4, 5]
becomes
two slices [1, 3, 5]
and [2, 4]
. This is guaranteed to
succeed even if self.len()
is odd, and even if self
has only zero or one elements.
fn substrides(&self, n: usize) -> Substrides<'a, T>
Returns an iterator over n
strided subslices of self
each
pointing to every n
th element, starting at successive
offsets.
Calling substrides(3)
on a slice pointing to [1, 2, 3, 4, 5, 6, 7]
will yield, in turn, [1, 4, 7]
, [2, 5]
and finally
[3, 6]
. Like with split2
this is guaranteed to succeed
(return n
strided slices) even if self
has fewer than n
elements and if self.len()
is not a multiple of n
.
fn get(&self, n: usize) -> Option<&'a T>
Returns a reference to the n
th element of self
, or None
if n
is out-of-bounds.
fn iter(&self) -> Items<'a, T>
Returns an iterator over references to each successive element
of self
.
Unlike MutStrides
, this can return references with the
maximum lifetime without consuming self
and so an
into_iter
equivalent is unnecessary.
fn slice(&self, from: usize, to: usize) -> Stride<'a, T>
Returns a strided slice containing only the elements from
indices from
(inclusive) to to
(exclusive).
Panic
Panics if from > to
or if to > self.len()
.
fn slice_from(&self, from: usize) -> Stride<'a, T>
Returns a strided slice containing only the elements from
index from
(inclusive).
Panic
Panics if from > self.len()
.
fn slice_to(&self, to: usize) -> Stride<'a, T>
Returns a strided slice containing only the elements to
index to
(exclusive).
Panic
Panics if to > self.len()
.
fn split_at(&self, idx: usize) -> (Stride<'a, T>, Stride<'a, T>)
Returns two strided slices, the first with elements up to
idx
(exclusive) and the second with elements from idx
.
This is semantically equivalent to (self.slice_to(idx), self.slice_from(idx))
.
Panic
Panics if idx > self.len()
.