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 nth 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 nth 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 nth 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().

Trait Implementations

impl<'a, T> Copy for Stride<'a, T>

impl<'a, T> Clone for Stride<'a, T>

fn clone(&self) -> Stride<'a, T>

fn clone_from(&mut self, source: &Self)

impl<'a, T: Sync> Sync for Stride<'a, T>

impl<'a, T: Sync> Send for Stride<'a, T>

impl<'a, T: Debug> Debug for Stride<'a, T>

fn fmt(&self, f: &mut Formatter) -> Result

impl<'a, T> Index<usize> for Stride<'a, T>

type Output = T

fn index<'b>(&'b self, n: usize) -> &'b T

impl<'a, T> Strided for Stride<'a, T>

type Elem = T

fn as_stride(&self) -> Stride<T>

fn stride(&self) -> usize

impl<'a, T, X: AsRef<[T]> + ?Sized> From<&'a X> for Stride<'a, T>

fn from(value: &X) -> Stride<T>

Derived Implementations

impl<'a, T: Ord + 'a> Ord for Stride<'a, T> where T: Ord

fn cmp(&self, __arg_0: &Stride<'a, T>) -> Ordering

impl<'a, T: PartialOrd + 'a> PartialOrd for Stride<'a, T> where T: PartialOrd

fn partial_cmp(&self, __arg_0: &Stride<'a, T>) -> Option<Ordering>

fn lt(&self, __arg_0: &Stride<'a, T>) -> bool

fn le(&self, __arg_0: &Stride<'a, T>) -> bool

fn gt(&self, __arg_0: &Stride<'a, T>) -> bool

fn ge(&self, __arg_0: &Stride<'a, T>) -> bool

impl<'a, T: Eq + 'a> Eq for Stride<'a, T> where T: Eq

impl<'a, T: PartialEq + 'a> PartialEq for Stride<'a, T> where T: PartialEq

fn eq(&self, __arg_0: &Stride<'a, T>) -> bool

fn ne(&self, __arg_0: &Stride<'a, T>) -> bool