mop-structs 0.0.2

Low-level structures for MOP
#[cfg_attr(
    feature = "serialization",
    derive(serde_derive::Serialize, serde_derive::Deserialize)
)]
#[derive(Clone, Copy, Debug, Hash, PartialEq, PartialOrd)]
pub struct Dim<T> {
    d: T,
}

impl Dim<usize> {
    #[inline]
    pub fn len(self) -> usize {
        self.d
    }

    pub fn len_mut(&mut self) -> &mut usize {
        &mut self.d
    }
}

impl From<usize> for Dim<usize> {
    fn from(from: usize) -> Self {
        Dim { d: from }
    }
}

impl From<Dim<[usize; 2]>> for Dim<usize> {
    fn from(from: Dim<[usize; 2]>) -> Self {
        Dim { d: from.rows() }
    }
}

impl From<Dim<[usize; 3]>> for Dim<usize> {
    fn from(from: Dim<[usize; 3]>) -> Self {
        Dim { d: from.rows() }
    }
}

impl Dim<[usize; 2]> {
    #[inline]
    pub fn cols(&self) -> usize {
        self.d[1]
    }

    #[allow(dead_code)]
    pub fn cols_mut(&mut self) -> &mut usize {
        &mut self.d[1]
    }

    #[inline]
    pub fn rows(&self) -> usize {
        self.d[0]
    }

    pub fn rows_mut(&mut self) -> &mut usize {
        &mut self.d[0]
    }
}

impl From<[usize; 2]> for Dim<[usize; 2]> {
    fn from(from: [usize; 2]) -> Self {
        Dim { d: from }
    }
}

impl From<Dim<[usize; 3]>> for Dim<[usize; 2]> {
    fn from(from: Dim<[usize; 3]>) -> Self {
        Dim {
            d: [from.rows(), from.cols()],
        }
    }
}

impl Dim<[usize; 3]> {
    #[inline]
    pub fn cols(&self) -> usize {
        self.d[1]
    }

    #[allow(dead_code)]
    #[inline]
    pub fn cols_mut(&mut self) -> &mut usize {
        &mut self.d[1]
    }

    #[inline]
    pub fn layers(&self) -> usize {
        self.d[2]
    }

    pub fn layers_mut(&mut self) -> &mut usize {
        &mut self.d[2]
    }

    #[inline]
    pub fn rows(&self) -> usize {
        self.d[0]
    }

    #[allow(dead_code)]
    pub fn rows_mut(&mut self) -> &mut usize {
        &mut self.d[0]
    }
}

impl From<[usize; 3]> for Dim<[usize; 3]> {
    fn from(from: [usize; 3]) -> Self {
        Dim { d: from }
    }
}