Trait enso_prelude::iter::Sum1.12.0[][src]

pub trait Sum<A = Self> {
    fn sum<I>(iter: I) -> Self
    where
        I: Iterator<Item = A>
; }
Expand description

Trait to represent types that can be created by summing up an iterator.

This trait is used to implement the sum() method on iterators. Types which implement the trait can be generated by the sum() method. Like FromIterator this trait should rarely be called directly and instead interacted with through Iterator::sum().

Required methods

fn sum<I>(iter: I) -> Self where
    I: Iterator<Item = A>, 
[src]

Method which takes an iterator and generates Self from the elements by “summing up” the items.

Implementations on Foreign Types

impl Sum<Wrapping<i32>> for Wrapping<i32>[src]

pub fn sum<I>(iter: I) -> Wrapping<i32> where
    I: Iterator<Item = Wrapping<i32>>, 
[src]

impl<'a> Sum<&'a f32> for f32[src]

pub fn sum<I>(iter: I) -> f32 where
    I: Iterator<Item = &'a f32>, 
[src]

impl<'a> Sum<&'a u64> for u64[src]

pub fn sum<I>(iter: I) -> u64 where
    I: Iterator<Item = &'a u64>, 
[src]

impl<'a> Sum<&'a Wrapping<u8>> for Wrapping<u8>[src]

pub fn sum<I>(iter: I) -> Wrapping<u8> where
    I: Iterator<Item = &'a Wrapping<u8>>, 
[src]

impl Sum<Wrapping<u8>> for Wrapping<u8>[src]

pub fn sum<I>(iter: I) -> Wrapping<u8> where
    I: Iterator<Item = Wrapping<u8>>, 
[src]

impl Sum<i8> for i8[src]

pub fn sum<I>(iter: I) -> i8 where
    I: Iterator<Item = i8>, 
[src]

impl<T, U> Sum<Option<U>> for Option<T> where
    T: Sum<U>, 
[src]

pub fn sum<I>(iter: I) -> Option<T> where
    I: Iterator<Item = Option<U>>, 
[src]

Takes each element in the Iterator: if it is a None, no further elements are taken, and the None is returned. Should no None occur, the sum of all elements is returned.

Examples

This sums up the position of the character ‘a’ in a vector of strings, if a word did not have the character ‘a’ the operation returns None:

let words = vec!["have", "a", "great", "day"];
let total: Option<usize> = words.iter().map(|w| w.find('a')).sum();
assert_eq!(total, Some(5));

impl Sum<u16> for u16[src]

pub fn sum<I>(iter: I) -> u16 where
    I: Iterator<Item = u16>, 
[src]

impl<'a> Sum<&'a Wrapping<u64>> for Wrapping<u64>[src]

pub fn sum<I>(iter: I) -> Wrapping<u64> where
    I: Iterator<Item = &'a Wrapping<u64>>, 
[src]

impl Sum<usize> for usize[src]

pub fn sum<I>(iter: I) -> usize where
    I: Iterator<Item = usize>, 
[src]

impl Sum<Wrapping<usize>> for Wrapping<usize>[src]

pub fn sum<I>(iter: I) -> Wrapping<usize> where
    I: Iterator<Item = Wrapping<usize>>, 
[src]

impl Sum<Duration> for Duration[src]

pub fn sum<I>(iter: I) -> Duration where
    I: Iterator<Item = Duration>, 
[src]

impl<'a> Sum<&'a isize> for isize[src]

pub fn sum<I>(iter: I) -> isize where
    I: Iterator<Item = &'a isize>, 
[src]

impl<'a> Sum<&'a Wrapping<u128>> for Wrapping<u128>[src]

pub fn sum<I>(iter: I) -> Wrapping<u128> where
    I: Iterator<Item = &'a Wrapping<u128>>, 
[src]

impl<'a> Sum<&'a Wrapping<i32>> for Wrapping<i32>[src]

pub fn sum<I>(iter: I) -> Wrapping<i32> where
    I: Iterator<Item = &'a Wrapping<i32>>, 
[src]

impl<'a> Sum<&'a Wrapping<usize>> for Wrapping<usize>[src]

pub fn sum<I>(iter: I) -> Wrapping<usize> where
    I: Iterator<Item = &'a Wrapping<usize>>, 
[src]

impl Sum<i64> for i64[src]

pub fn sum<I>(iter: I) -> i64 where
    I: Iterator<Item = i64>, 
[src]

impl<'a> Sum<&'a usize> for usize[src]

pub fn sum<I>(iter: I) -> usize where
    I: Iterator<Item = &'a usize>, 
[src]

impl Sum<f64> for f64[src]

pub fn sum<I>(iter: I) -> f64 where
    I: Iterator<Item = f64>, 
[src]

impl<'a> Sum<&'a i8> for i8[src]

pub fn sum<I>(iter: I) -> i8 where
    I: Iterator<Item = &'a i8>, 
[src]

impl<'a> Sum<&'a Wrapping<i8>> for Wrapping<i8>[src]

pub fn sum<I>(iter: I) -> Wrapping<i8> where
    I: Iterator<Item = &'a Wrapping<i8>>, 
[src]

impl<'a> Sum<&'a u32> for u32[src]

pub fn sum<I>(iter: I) -> u32 where
    I: Iterator<Item = &'a u32>, 
[src]

impl<'a> Sum<&'a Wrapping<i128>> for Wrapping<i128>[src]

pub fn sum<I>(iter: I) -> Wrapping<i128> where
    I: Iterator<Item = &'a Wrapping<i128>>, 
[src]

impl<'a> Sum<&'a Wrapping<u16>> for Wrapping<u16>[src]

pub fn sum<I>(iter: I) -> Wrapping<u16> where
    I: Iterator<Item = &'a Wrapping<u16>>, 
[src]

impl<'a> Sum<&'a i32> for i32[src]

pub fn sum<I>(iter: I) -> i32 where
    I: Iterator<Item = &'a i32>, 
[src]

impl Sum<i16> for i16[src]

pub fn sum<I>(iter: I) -> i16 where
    I: Iterator<Item = i16>, 
[src]

impl<'a> Sum<&'a Wrapping<u32>> for Wrapping<u32>[src]

pub fn sum<I>(iter: I) -> Wrapping<u32> where
    I: Iterator<Item = &'a Wrapping<u32>>, 
[src]

impl<'a> Sum<&'a u16> for u16[src]

pub fn sum<I>(iter: I) -> u16 where
    I: Iterator<Item = &'a u16>, 
[src]

impl<'a> Sum<&'a i64> for i64[src]

pub fn sum<I>(iter: I) -> i64 where
    I: Iterator<Item = &'a i64>, 
[src]

impl Sum<Wrapping<u32>> for Wrapping<u32>[src]

pub fn sum<I>(iter: I) -> Wrapping<u32> where
    I: Iterator<Item = Wrapping<u32>>, 
[src]

impl Sum<Wrapping<i8>> for Wrapping<i8>[src]

pub fn sum<I>(iter: I) -> Wrapping<i8> where
    I: Iterator<Item = Wrapping<i8>>, 
[src]

impl Sum<Wrapping<i64>> for Wrapping<i64>[src]

pub fn sum<I>(iter: I) -> Wrapping<i64> where
    I: Iterator<Item = Wrapping<i64>>, 
[src]

impl Sum<Wrapping<u64>> for Wrapping<u64>[src]

pub fn sum<I>(iter: I) -> Wrapping<u64> where
    I: Iterator<Item = Wrapping<u64>>, 
[src]

impl Sum<Wrapping<isize>> for Wrapping<isize>[src]

pub fn sum<I>(iter: I) -> Wrapping<isize> where
    I: Iterator<Item = Wrapping<isize>>, 
[src]

impl Sum<f32> for f32[src]

pub fn sum<I>(iter: I) -> f32 where
    I: Iterator<Item = f32>, 
[src]

impl<'a> Sum<&'a Wrapping<i64>> for Wrapping<i64>[src]

pub fn sum<I>(iter: I) -> Wrapping<i64> where
    I: Iterator<Item = &'a Wrapping<i64>>, 
[src]

impl<'a> Sum<&'a f64> for f64[src]

pub fn sum<I>(iter: I) -> f64 where
    I: Iterator<Item = &'a f64>, 
[src]

impl Sum<Wrapping<i16>> for Wrapping<i16>[src]

pub fn sum<I>(iter: I) -> Wrapping<i16> where
    I: Iterator<Item = Wrapping<i16>>, 
[src]

impl<'a> Sum<&'a i128> for i128[src]

pub fn sum<I>(iter: I) -> i128 where
    I: Iterator<Item = &'a i128>, 
[src]

impl Sum<Wrapping<u128>> for Wrapping<u128>[src]

pub fn sum<I>(iter: I) -> Wrapping<u128> where
    I: Iterator<Item = Wrapping<u128>>, 
[src]

impl Sum<Wrapping<i128>> for Wrapping<i128>[src]

pub fn sum<I>(iter: I) -> Wrapping<i128> where
    I: Iterator<Item = Wrapping<i128>>, 
[src]

impl<'a> Sum<&'a Wrapping<i16>> for Wrapping<i16>[src]

pub fn sum<I>(iter: I) -> Wrapping<i16> where
    I: Iterator<Item = &'a Wrapping<i16>>, 
[src]

impl<'a> Sum<&'a Duration> for Duration[src]

pub fn sum<I>(iter: I) -> Duration where
    I: Iterator<Item = &'a Duration>, 
[src]

impl Sum<Wrapping<u16>> for Wrapping<u16>[src]

pub fn sum<I>(iter: I) -> Wrapping<u16> where
    I: Iterator<Item = Wrapping<u16>>, 
[src]

impl<'a> Sum<&'a i16> for i16[src]

pub fn sum<I>(iter: I) -> i16 where
    I: Iterator<Item = &'a i16>, 
[src]

impl<T, U, E> Sum<Result<U, E>> for Result<T, E> where
    T: Sum<U>, 
[src]

pub fn sum<I>(iter: I) -> Result<T, E> where
    I: Iterator<Item = Result<U, E>>, 
[src]

Takes each element in the Iterator: if it is an Err, no further elements are taken, and the Err is returned. Should no Err occur, the sum of all elements is returned.

Examples

This sums up every integer in a vector, rejecting the sum if a negative element is encountered:

let v = vec![1, 2];
let res: Result<i32, &'static str> = v.iter().map(|&x: &i32|
    if x < 0 { Err("Negative element found") }
    else { Ok(x) }
).sum();
assert_eq!(res, Ok(3));

impl Sum<isize> for isize[src]

pub fn sum<I>(iter: I) -> isize where
    I: Iterator<Item = isize>, 
[src]

impl Sum<u128> for u128[src]

pub fn sum<I>(iter: I) -> u128 where
    I: Iterator<Item = u128>, 
[src]

impl Sum<i128> for i128[src]

pub fn sum<I>(iter: I) -> i128 where
    I: Iterator<Item = i128>, 
[src]

impl Sum<u8> for u8[src]

pub fn sum<I>(iter: I) -> u8 where
    I: Iterator<Item = u8>, 
[src]

impl<'a> Sum<&'a u128> for u128[src]

pub fn sum<I>(iter: I) -> u128 where
    I: Iterator<Item = &'a u128>, 
[src]

impl Sum<u32> for u32[src]

pub fn sum<I>(iter: I) -> u32 where
    I: Iterator<Item = u32>, 
[src]

impl<'a> Sum<&'a Wrapping<isize>> for Wrapping<isize>[src]

pub fn sum<I>(iter: I) -> Wrapping<isize> where
    I: Iterator<Item = &'a Wrapping<isize>>, 
[src]

impl<'a> Sum<&'a u8> for u8[src]

pub fn sum<I>(iter: I) -> u8 where
    I: Iterator<Item = &'a u8>, 
[src]

impl Sum<i32> for i32[src]

pub fn sum<I>(iter: I) -> i32 where
    I: Iterator<Item = i32>, 
[src]

impl Sum<u64> for u64[src]

pub fn sum<I>(iter: I) -> u64 where
    I: Iterator<Item = u64>, 
[src]

impl<T> Sum<T> for BigInt where
    BigInt: Add<T>,
    <BigInt as Add<T>>::Output == BigInt
[src]

pub fn sum<I>(iter: I) -> BigInt where
    I: Iterator<Item = T>, 
[src]

impl<T> Sum<T> for BigUint where
    BigUint: Add<T>,
    <BigUint as Add<T>>::Output == BigUint
[src]

pub fn sum<I>(iter: I) -> BigUint where
    I: Iterator<Item = T>, 
[src]

impl<T> Sum<Complex<T>> for Complex<T> where
    T: Num + Clone
[src]

pub fn sum<I>(iter: I) -> Complex<T> where
    I: Iterator<Item = Complex<T>>, 
[src]

impl<'a, T> Sum<&'a Complex<T>> for Complex<T> where
    T: 'a + Num + Clone
[src]

pub fn sum<I>(iter: I) -> Complex<T> where
    I: Iterator<Item = &'a Complex<T>>, 
[src]

impl<T> Sum<Ratio<T>> for Ratio<T> where
    T: Integer + Clone
[src]

pub fn sum<I>(iter: I) -> Ratio<T> where
    I: Iterator<Item = Ratio<T>>, 
[src]

impl<'a, T> Sum<&'a Ratio<T>> for Ratio<T> where
    T: Integer + Clone
[src]

pub fn sum<I>(iter: I) -> Ratio<T> where
    I: Iterator<Item = &'a Ratio<T>>, 
[src]

impl<T, C> Sum<Matrix<T, Dynamic, C, <DefaultAllocator as Allocator<T, Dynamic, C>>::Buffer>> for Matrix<T, Dynamic, C, <DefaultAllocator as Allocator<T, Dynamic, C>>::Buffer> where
    C: Dim,
    T: Scalar + ClosedAdd<T> + Zero,
    DefaultAllocator: Allocator<T, Dynamic, C>, 
[src]

pub fn sum<I>(
    iter: I
) -> Matrix<T, Dynamic, C, <DefaultAllocator as Allocator<T, Dynamic, C>>::Buffer> where
    I: Iterator<Item = Matrix<T, Dynamic, C, <DefaultAllocator as Allocator<T, Dynamic, C>>::Buffer>>, 
[src]

Example

assert_eq!(vec![DVector::repeat(3, 1.0f64),
                DVector::repeat(3, 1.0f64),
                DVector::repeat(3, 1.0f64)].into_iter().sum::<DVector<f64>>(),
           DVector::repeat(3, 1.0f64) + DVector::repeat(3, 1.0f64) + DVector::repeat(3, 1.0f64));

Panics

Panics if the iterator is empty:

iter::empty::<DMatrix<f64>>().sum::<DMatrix<f64>>(); // panics!

impl<'a, T, C> Sum<&'a Matrix<T, Dynamic, C, <DefaultAllocator as Allocator<T, Dynamic, C>>::Buffer>> for Matrix<T, Dynamic, C, <DefaultAllocator as Allocator<T, Dynamic, C>>::Buffer> where
    C: Dim,
    T: Scalar + ClosedAdd<T> + Zero,
    DefaultAllocator: Allocator<T, Dynamic, C>, 
[src]

pub fn sum<I>(
    iter: I
) -> Matrix<T, Dynamic, C, <DefaultAllocator as Allocator<T, Dynamic, C>>::Buffer> where
    I: Iterator<Item = &'a Matrix<T, Dynamic, C, <DefaultAllocator as Allocator<T, Dynamic, C>>::Buffer>>, 
[src]

Example

let v = &DVector::repeat(3, 1.0f64);

assert_eq!(vec![v, v, v].into_iter().sum::<DVector<f64>>(),
           v + v + v);

Panics

Panics if the iterator is empty:

iter::empty::<&DMatrix<f64>>().sum::<DMatrix<f64>>(); // panics!

impl<T, R, C> Sum<Matrix<T, R, C, <DefaultAllocator as Allocator<T, R, C>>::Buffer>> for Matrix<T, R, C, <DefaultAllocator as Allocator<T, R, C>>::Buffer> where
    C: DimName,
    T: Scalar + ClosedAdd<T> + Zero,
    R: DimName,
    DefaultAllocator: Allocator<T, R, C>, 
[src]

pub fn sum<I>(
    iter: I
) -> Matrix<T, R, C, <DefaultAllocator as Allocator<T, R, C>>::Buffer> where
    I: Iterator<Item = Matrix<T, R, C, <DefaultAllocator as Allocator<T, R, C>>::Buffer>>, 
[src]

impl<'a, T, R, C> Sum<&'a Matrix<T, R, C, <DefaultAllocator as Allocator<T, R, C>>::Buffer>> for Matrix<T, R, C, <DefaultAllocator as Allocator<T, R, C>>::Buffer> where
    C: DimName,
    T: Scalar + ClosedAdd<T> + Zero,
    R: DimName,
    DefaultAllocator: Allocator<T, R, C>, 
[src]

pub fn sum<I>(
    iter: I
) -> Matrix<T, R, C, <DefaultAllocator as Allocator<T, R, C>>::Buffer> where
    I: Iterator<Item = &'a Matrix<T, R, C, <DefaultAllocator as Allocator<T, R, C>>::Buffer>>, 
[src]

impl<'a, T> Sum<&'a Complex<T>> for Complex<T> where
    T: 'a + Num + Clone
[src]

pub fn sum<I>(iter: I) -> Complex<T> where
    I: Iterator<Item = &'a Complex<T>>, 
[src]

impl<T> Sum<Complex<T>> for Complex<T> where
    T: Num + Clone
[src]

pub fn sum<I>(iter: I) -> Complex<T> where
    I: Iterator<Item = Complex<T>>, 
[src]

impl<T> Sum<Ratio<T>> for Ratio<T> where
    T: Integer + Clone
[src]

pub fn sum<I>(iter: I) -> Ratio<T> where
    I: Iterator<Item = Ratio<T>>, 
[src]

impl<'a, T> Sum<&'a Ratio<T>> for Ratio<T> where
    T: Integer + Clone
[src]

pub fn sum<I>(iter: I) -> Ratio<T> where
    I: Iterator<Item = &'a Ratio<T>>, 
[src]

Implementors