gkquad 0.0.4

Numerical integration library for Rust
mod cowmut {
    use core::fmt::{self, Debug, Display};
    pub use core::ops::{Deref, DerefMut};

    pub enum CowMut<'a, T: 'a> {
        Owned(T),
        Borrowed(&'a mut T),
    }

    impl<'a, T: 'a> Deref for CowMut<'a, T> {
        type Target = T;

        #[inline]
        fn deref(&self) -> &T {
            self.as_ref()
        }
    }

    impl<'a, T: 'a> DerefMut for CowMut<'a, T> {
        #[inline]
        fn deref_mut(&mut self) -> &mut T {
            self.as_mut()
        }
    }

    impl<'a, T: 'a> AsRef<T> for CowMut<'a, T> {
        #[inline]
        fn as_ref(&self) -> &T {
            match *self {
                CowMut::Owned(ref t) => t,
                CowMut::Borrowed(&mut ref t) => t,
            }
        }
    }

    impl<'a, T: 'a> AsMut<T> for CowMut<'a, T> {
        #[inline]
        fn as_mut(&mut self) -> &mut T {
            match *self {
                CowMut::Owned(ref mut t) => t,
                CowMut::Borrowed(&mut ref mut t) => t,
            }
        }
    }

    impl<'a, T: Clone + 'a> Clone for CowMut<'a, T> {
        #[inline]
        fn clone(&self) -> Self {
            match *self {
                CowMut::Owned(ref t) => CowMut::Owned(t.clone()),
                CowMut::Borrowed(&mut ref t) => CowMut::Owned(t.clone()),
            }
        }
    }

    impl<'a, T: Display + 'a> Display for CowMut<'a, T> {
        fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
            Display::fmt(self.as_ref(), f)
        }
    }

    impl<'a, T: Debug + 'a> Debug for CowMut<'a, T> {
        fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
            Debug::fmt(self.as_ref(), f)
        }
    }

    impl<'a, T: PartialEq + 'a> PartialEq for CowMut<'a, T> {
        #[inline]
        fn eq(&self, other: &Self) -> bool {
            self.as_ref().eq(other.as_ref())
        }
    }

    impl<'a, T: Eq + 'a> Eq for CowMut<'a, T> {}

    impl<'a, T: Default + 'a> Default for CowMut<'a, T> {
        fn default() -> Self {
            CowMut::Owned(T::default())
        }
    }
}

pub use cowmut::*;