Trait SliceModifyIter

Source
pub trait SliceModifyIter<T>
where Self: AsMut<[T]> + AsRef<[T]>,
{ // Provided methods fn gen_range_bounds(&self, size: usize) -> GenRangeBounds { ... } fn gen_tuple_bounds(&self, size: usize) -> StepBoundary<Range<usize>> { ... } fn modify_slice<F, I>(&mut self, iter: I, f: F) where I: Iterator, <I as Iterator>::Item: SliceIndex<[T], Output = [T]>, F: FnMut(&mut [T]) { ... } }
Expand description

Iterator with external slice indexing.

Provided Methods§

Source

fn gen_range_bounds(&self, size: usize) -> GenRangeBounds

Create an iterator that returns RangeInclusive structures with index bounds from the slice.

§Panics

Panics if the step size is zero.

§Examples

Basic usage:

use iterextd::SliceModifyIter;

let val = vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

let iter = val.gen_range_bounds(3);
let vec = iter.collect::<Vec<_>>();
assert_eq!(vec, vec![0..=2, 3..=5, 6..=8, 9..=10]);
Source

fn gen_tuple_bounds(&self, size: usize) -> StepBoundary<Range<usize>>

Create an iterator that returns tuples with index bounds from the slice.

§Panics

Panics if the step size is zero.

§Examples

Basic usage:

use iterextd::SliceModifyIter;

let val = vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let iter = val.gen_tuple_bounds(3);
let vec = iter.collect::<Vec<_>>();
assert_eq!(vec, vec![(0, 2), (3, 5), (6, 8), (9, 10)]);
Source

fn modify_slice<F, I>(&mut self, iter: I, f: F)
where I: Iterator, <I as Iterator>::Item: SliceIndex<[T], Output = [T]>, F: FnMut(&mut [T]),

Modify a slice using an iterator with external slice indexing.

§Examples

Basic usage:

use iterextd::SliceModifyIter;

let mut vec = vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let iter = vec.gen_range_bounds(2);
let logic = |e: &mut[i32]| {
    if e.len() == 2 {
        let one = e[0];
        e[0] = e[1];
        e[1] = one;
    }
};
let _ = vec.modify_slice(iter, logic);
assert_eq!(vec, vec![1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 10]);

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<T> SliceModifyIter<T> for [T]

Implementors§