Trait iterextd::SliceModifyIter
source · pub trait SliceModifyIter<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§
sourcefn gen_range_bounds(&self, size: usize) -> GenRangeBounds ⓘ
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]);
sourcefn gen_tuple_bounds(&self, size: usize) -> StepBoundary<Range<usize>> ⓘ
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)]);
sourcefn modify_slice<F, I>(&mut self, iter: I, f: F)
fn modify_slice<F, I>(&mut self, iter: I, f: F)
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]);
Object Safety§
This trait is not object safe.