Skip to main content

Map

Struct Map 

Source
pub struct Map<I, F>
where I: Bulk, F: FnMut<(I::Item,)>,
{ /* private fields */ }
Expand description

A bulk that maps the values of bulk with f.

This struct is created by the map method on Bulk. See its documentation for more.

§Notes about side effects

The map iterator implements DoubleEndedIterator, meaning that you can also map backwards:

use bulks::*;
 
let v: [i32; 3] = [1, 2, 3].into_bulk().map(|x| x + 1).rev().collect();

assert_eq!(v, [4, 3, 2]);

But if your closure has state, iterating backwards may act in a way you do not expect. Let’s go through an example. First, in the forward direction:

use bulks::*;
 
let mut c = 0;

for pair in ['a', 'b', 'c'].into_bulk()
    .map(|letter| { c += 1; (letter, c) })
{
    println!("{pair:?}");
}

This will print ('a', 1), ('b', 2), ('c', 3).

Now consider this twist where we add a call to rev. This version will print ('c', 1), ('b', 2), ('a', 3). Note that the letters are reversed, but the values of the counter still go in order. This is because map() is still being called lazily on each item, but we are popping items off the back of the array now, instead of shifting them from the front.

use bulks::*;
 
let mut c = 0;

for pair in ['a', 'b', 'c'].into_bulk()
    .map(|letter| { c += 1; (letter, c) })
    .rev()
{
    println!("{pair:?}");
}

Trait Implementations§

Source§

impl<I, F> Bulk for Map<I, F>
where I: Bulk<Item>, F: FnMut<(I::Item,)>,

Source§

type MinLength = <I as Bulk>::MinLength

Source§

type MaxLength = <I as Bulk>::MaxLength

Source§

fn len(&self) -> usize

Returns the exact length of the bulk. Read more
Source§

fn is_empty(&self) -> bool

Returns true if the iterator is empty. Read more
Source§

fn first(self) -> Option<Self::Item>
where Self::Item:, Self: Sized,

Returns the first value, and discards the rest of the bulk. Read more
Source§

fn for_each<FF>(self, f: FF)
where Self: Sized, FF: FnMut(Self::Item),

Calls a closure on each element of a bulk. Read more
Source§

fn try_for_each<FF, R>(self, f: FF) -> R
where Self: Sized, FF: FnMut(Self::Item) -> R, R: Try<Output = (), Residual>,

A bulk method that applies a fallible function to each item in the bulk, stopping at the first error and returning that error. Read more
Source§

type Length = Self::Length

Source§

fn length(&self) -> Value<Self::Length>

Source§

fn last(self) -> Option<Self::Item>
where Self::Item:, Self: Sized,

Returns the last value, and discards the rest of the bulk. Read more
Source§

fn nth<L>(self, n: L) -> Option<Self::Item>
where Self: Sized, Self::Item:, L: LengthValue,

Returns the n-th value, and discards the rest of the bulk. Read more
Source§

fn many<NN, const N: usize>(self, n: NN) -> [Option<Self::Item>; N]
where Self: Sized, Self::Item:, NN: IntoBulk<Item = usize, IntoBulk: Bulk + StaticBulk<Array<()> = [(); N]>>,

Source§

fn fold<B, F>(self, init: B, f: F) -> B
where Self: Sized, B:, F: FnMut(B, Self::Item) -> B,

Folds every element into an accumulator by applying an operation, returning the final result. Read more
Source§

fn try_fold<B, F, R>(self, init: B, f: F) -> R
where B:, Self: Sized, Self::Item:, F: FnMut(B, Self::Item) -> R, R: Try<Output = B, Residual>,

Source§

fn reduce<F>(self, f: F) -> Option<Self::Item>
where Self: Sized, Self::Item:, F: FnMut(Self::Item, Self::Item) -> Self::Item,

Source§

fn try_reduce<F, R>( self, f: F, ) -> <R::Residual as Residual<Option<R::Output>>>::TryType
where Self: Sized, Self::Item:, F: FnMut(Self::Item, Self::Item) -> R, R: Try<Output = Self::Item, Residual: Residual<Option<Self::Item>, TryType: Try>>,

Source§

fn step_by<L>(self, step: L) -> StepBy<Self, L::Length<()>>
where Self: Sized, L: LengthValue,

Creates a bulk starting at the same point, but stepping by the given amount at each iteration. Read more
Source§

fn chain<U>(self, other: U) -> Chain<Self, U::IntoBulk>
where Self: Sized, U: IntoBulk<Item = Self::Item>,

Takes two bulks and creates a new bulk over both in sequence. Read more
Source§

fn zip<U>( self, other: U, ) -> Zip<Self, <<U as IntoContained>::IntoContained as IntoBulk>::IntoBulk>
where Self: Sized, U: IntoContainedBy<Self>,

‘Zips up’ two bulks or iterators into a single bulk of pairs. One of them must be a bulk. Read more
Source§

fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
where Self: Sized, Self::Item: Clone,

Creates a new bulk which places a copy of separator between adjacent items of the original bulk. Read more
Source§

fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
where Self: Sized, G: FnMut() -> Self::Item,

Creates a new bulk which places an item generated by separator between adjacent items of the original bulk. Read more
Source§

fn map<B, F>(self, f: F) -> Map<Self, F>
where Self: Sized, F: FnMut(Self::Item) -> B,

Takes a closure and creates a bulk which calls that closure on each element. Read more
Source§

fn enumerate(self) -> Enumerate<Self>
where Self: Sized,

Creates a bulk which gives the current index together with its values. Read more
Source§

fn enumerate_from<U>(self, initial_count: U) -> EnumerateFrom<Self, U>
where Self: Sized, U: Step + Copy,

Creates a bulk which gives the current index counting from a given initial index together with its values. Read more
Source§

fn skip<L>(self, n: L) -> Skip<Self, L::Length<()>>
where Self: Sized, L: LengthValue,

Creates a bulk that skips the first n elements. Read more
Source§

fn take<L>(self, n: L) -> Take<Self, L::Length<()>>
where Self: Sized, L: LengthValue,

Creates a bulk for the first n elements, or fewer if the underlying bulk/iterator is shorter. Read more
Source§

fn flat_map<U, F>(self, f: F) -> FlatMap<Self, F>
where Self: Sized, U: IntoBulk<IntoBulk: StaticBulk>, F: FnMut(Self::Item) -> U,

Creates a bulk that works like map, but flattens nested structure. Read more
Source§

fn flatten(self) -> Flatten<Self>
where Self: Sized, Self::Item: IntoBulk<IntoBulk: StaticBulk>,

Creates a bulk that flattens nested structure. Read more
Source§

fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
where Self: Sized, F: FnMut(&[Self::Item; N]) -> R,

Calls the given function f for each contiguous window of size N over self and returns a bulk of the outputs of f. The windows during mapping will overlap. Read more
Source§

fn inspect<F>(self, f: F) -> Inspect<Self, F>
where Self: Sized, F: FnMut(&Self::Item),

Does something with each element of a bulk, passing the value on. Read more
Source§

fn mutate<F>(self, f: F) -> Mutate<Self, F>
where Self: Sized, F: FnMut(&mut Self::Item),

Mutates with each element of a bulk, passing the value on. Read more
Source§

fn collect<C, A>(self) -> C
where Self: Sized, C: FromBulk<A>, A: CollectionAdapter<Elem = Self::Item> + CollectionStrategy<Self, C> + ?Sized,

Transforms a bulk into a collection. Read more
Source§

fn try_collect<C, A>( self, ) -> <<Self::Item as Try>::Residual as Residual<C>>::TryType
where Self: Sized, C: FromBulk<A>, A: CollectionAdapter<Elem = <Self::Item as Try>::Output> + TryCollectionAdapter<Self, C> + ?Sized, Self::Item: Try<Residual: Residual<C, TryType: Try>>,

Fallibly transforms a bulk into a collection, short circuiting if a failure is encountered. Read more
Source§

fn collect_array( self, ) -> <Self as StaticBulk>::Array<<Self as IntoIterator>::Item>
where Self: StaticBulk,

Transforms a statically sized bulk into an array. The bulk must implement StaticBulk. Read more
Source§

fn try_collect_array( self, ) -> <<Self::Item as Try>::Residual as Residual<Self::Array<<Self::Item as Try>::Output>>>::TryType
where Self: StaticBulk<Item: Try<Residual: Residual<(), TryType: Try> + Residual<Self::Array<<Self::Item as Try>::Output>, TryType: Try>, Output>> + Bulk,

Fallibly transforms a statically sized bulk into an array, short circuiting if a failure is encountered. The bulk must implement StaticBulk. Read more
Source§

fn rev(self) -> Rev<Self>
where Self: Sized + DoubleEndedBulk,

Reverses a bulks’s direction. Read more
Source§

fn copied<'a, T>(self) -> Copied<Self>
where T: Copy + 'a, Self: Sized + Bulk<Item = &'a T>,

Creates a bulk which copies all of its elements. Read more
Source§

fn cloned<'a, T>(self) -> Cloned<Self>
where T: Clone + 'a, Self: Sized + Bulk<Item = &'a T>,

Creates a bulk which clones all of its elements. Read more
Source§

fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>
where Self: Sized,

Returns a bulk of N elements of the bulk at a time. Read more
Source§

fn split_at<L>(self, n: L) -> (Self::Left, Self::Right)
where Self: SplitBulk<L> + Sized, L: LengthValue,

Splits a bulk in two at a specified index. Read more
Source§

fn rsplit_at<L>(self, n: L) -> (Self::Left, Self::Right)
where Self: SplitBulk<SaturatingSub<<<Self as Bulk>::Length as Length>::Value, L>> + Sized, L: LengthValue,

Splits a bulk in two at a specified reversed index. Read more
Source§

impl<I, F> Clone for Map<I, F>
where I: Bulk + Clone, F: FnMut<(I::Item,)> + Clone,

Source§

fn clone(&self) -> Map<I, F>

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<I, F> Debug for Map<I, F>
where I: Bulk + Debug, F: FnMut<(I::Item,)>,

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<I, F> DoubleEndedBulk for Map<I, F>
where I: DoubleEndedBulk<Item>, F: FnMut<(I::Item,)>,

Source§

fn rev_for_each<FF>(self, f: FF)
where Self: Sized, FF: FnMut(Self::Item),

Calls a closure on each element of a bulk in reverse.
Source§

fn try_rev_for_each<FF, R>(self, f: FF) -> R
where Self: Sized, FF: FnMut(Self::Item) -> R, R: Try<Output = (), Residual>,

A bulk method that applies a fallible function to each item in the bulk in reverse, stopping at the first error and returning that error.
Source§

impl<I, F> IntoIterator for Map<I, F>
where I: Bulk, F: FnMut<(I::Item,)>,

Source§

type Item = <F as FnOnce(<I as IntoIterator>::Item)>::Output

The type of the elements being iterated over.
Source§

type IntoIter = Map<<I as IntoIterator>::IntoIter, F>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
Source§

impl<I, F, L> SplitBulk<L> for Map<I, F>
where I: SplitBulk<L, Item, Left: Bulk, Right: Bulk>, F: FnMut<(I::Item,)> + Clone, L: LengthValue,

Source§

type Left = Map<<I as SplitBulk<L>>::Left, F>

Source§

type Right = Map<<I as SplitBulk<L>>::Right, F>

Source§

fn split_at(_: Self, n: L) -> (Self::Left, Self::Right)
where Self: Sized,

Splits a bulk in two at a specified index. Read more

Auto Trait Implementations§

§

impl<I, F> Freeze for Map<I, F>
where I: Freeze, F: Freeze,

§

impl<I, F> RefUnwindSafe for Map<I, F>

§

impl<I, F> Send for Map<I, F>
where I: Send, F: Send,

§

impl<I, F> Sync for Map<I, F>
where I: Sync, F: Sync,

§

impl<I, F> Unpin for Map<I, F>
where I: Unpin, F: Unpin,

§

impl<I, F> UnwindSafe for Map<I, F>
where I: UnwindSafe, F: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> AsBulk for T
where T: ?Sized,

Source§

fn bulk<'a>(&'a self) -> <&'a Self as IntoBulk>::IntoBulk
where &'a Self: IntoBulk,

Creates a bulk from a reference. Read more
Source§

fn bulk_mut<'a>(&'a mut self) -> <&'a mut Self as IntoBulk>::IntoBulk
where &'a mut Self: IntoBulk,

Creates a bulk from a mutable reference. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<I, const N: usize> CollectNearest for I
where I: Bulk + StaticBulk<Array<()> = [(); N]>,

Source§

type Nearest = <I as StaticBulk>::Array<<I as IntoIterator>::Item>

Source§

type TryNearest = <I as StaticBulk>::Array<<<I as IntoIterator>::Item as Try>::Output> where <I as IntoIterator>::Item: Try

Source§

fn collect_nearest(self) -> <I as CollectNearest>::Nearest

Collects into an array if possible, otherwise a vector
Source§

fn try_collect_nearest( self, ) -> <<<I as IntoIterator>::Item as Try>::Residual as Residual<<I as CollectNearest>::TryNearest>>::TryType

Fallibly collects into an array if possible, otherwise a vector
Source§

impl<C, F> Curry<C> for F

Source§

type Output = Curried<(C,), (), F>

Source§

fn curry_once(self, arg: C) -> <F as Curry<C>>::Output

Source§

fn curry_mut(&mut self, arg: C) -> <&mut Self as Curry<C>>::Output

Source§

fn curry(&self, arg: C) -> <&Self as Curry<C>>::Output

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, A, I> IntoBulk for T
where T: IntoIterator<Item = A, IntoIter = I>, I: ExactSizeIterator<Item = A>,

Source§

type IntoBulk = Bulk<T>

Which kind of bulk are we turning this into?
Source§

default fn into_bulk(self) -> <T as IntoBulk>::IntoBulk

Creates a bulk from a value. Read more
Source§

impl<T> IntoBulk for T
where T: Bulk,

Source§

type IntoBulk = T

Which kind of bulk are we turning this into?
Source§

fn into_bulk(self) -> <T as IntoBulk>::IntoBulk

Creates a bulk from a value. Read more
Source§

impl<A, T> MaybeBulk for T
where T: Bulk<Item = A>, <T as Bulk>::MaxLength: MaybeLength, <T as Bulk>::MinLength: MaybeLength,

Source§

impl<A, T, const N: usize> MaybeBulk for T
where T: StaticBulk<Item = A, Array<()> = [(); N], Array<A> = [A; N]> + Bulk, [A; N]: Maybe<Item = A>, [(); N]: MaybeLength,

Source§

impl<C, F> RCurry<C> for F

Source§

type Output = Curried<(), (C,), F>

Source§

fn rcurry_once(self, arg: C) -> <F as RCurry<C>>::Output

Source§

fn rcurry_mut(&mut self, arg: C) -> <&mut Self as RCurry<C>>::Output

Source§

fn rcurry(&self, arg: C) -> <&Self as RCurry<C>>::Output

Source§

impl<U> Same for U

Source§

fn same<T>(self) -> Result<T, U>

Source§

impl<T, const N: usize> StaticBulk for T
where T: Bulk<MinLength = [(); N], MaxLength = [(); N]>,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T, B> EitherIntoBulk<B> for T
where T: EitherIntoBulk<B>, <T as EitherIntoBulk<B>>::EitherIntoBulk: IntoBulk, B: IntoIterator,

Source§

impl<T> EmptyBulk for T
where T: DoubleEndedBulk<Length = [(); 0]> + StaticBulk,

Source§

impl<T, B> IntoContainedBy<B> for T
where T: IntoContained + EitherIntoBulk<B>, B: IntoIterator,

Source§

impl<T> OnceBulk for T
where T: DoubleEndedBulk + StaticBulk<Array<<T as IntoIterator>::Item> = [<T as IntoIterator>::Item; 1]>,