radiate-utils 1.3.0

A Rust library for genetic algorithms and artificial evolution.
Documentation
use crate::Primitive;

pub struct MinMax<T: Primitive> {
    min: T,
    max: T,
}

impl<T: Primitive> MinMax<T> {
    pub fn min(&self) -> T {
        self.min
    }

    pub fn max(&self) -> T {
        self.max
    }

    pub fn min_max(&self) -> (T, T) {
        (self.min, self.max)
    }

    pub fn range(&self) -> T {
        self.max - self.min
    }

    #[inline]
    pub fn add(&mut self, value: &T) {
        if value < &self.min {
            self.min = *value;
        }

        if value > &self.max {
            self.max = *value;
        }
    }
}

impl<T: Primitive> Default for MinMax<T> {
    fn default() -> Self {
        MinMax {
            min: T::MAX,
            max: T::MIN,
        }
    }
}

impl<T> FromIterator<T> for MinMax<T>
where
    T: Primitive,
{
    fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self {
        let mut min_max = MinMax::default();

        for value in iter {
            min_max.add(&value);
        }

        min_max
    }
}

impl<'a, T> FromIterator<&'a T> for MinMax<T>
where
    T: Primitive,
{
    fn from_iter<I: IntoIterator<Item = &'a T>>(iter: I) -> Self {
        let mut min_max = MinMax::default();

        for value in iter {
            min_max.add(value);
        }

        min_max
    }
}