hmath 0.1.8

Big Integers and Rational Numbers
Documentation
mod arith;
mod comp;
pub mod convert;
pub mod funcs;

// data is always in the most reduced form
// [0] is the least-significant number
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
pub struct UBigInt(pub Vec<u32>);

impl UBigInt {

    /// size of its internal vector
    #[inline]
    pub fn len(&self) -> usize {
        self.0.len()
    }

    #[inline]
    pub fn zero() -> Self {
        UBigInt(vec![0])
    }

    #[inline]
    pub fn one() -> Self {
        UBigInt(vec![1])
    }

    #[inline]
    pub fn is_zero(&self) -> bool {
        self.len() == 1 && self.0[0] == 0
    }

    #[inline]
    pub fn is_one(&self) -> bool {
        self.len() == 1 && self.0[0] == 1
    }

    #[cfg(test)]
    pub fn is_valid(&self) -> bool {

        if self.len() == 0 {
            println!("length 0 ubigint");
            return false;
        }

        if self.len() > 1 && self.0[self.len() - 1] == 0 {
            println!("{:?}", self.0);
            return false;
        }

        true
    }

    #[inline]
    /// `vec[0]` is the least significant number
    pub fn from_raw(vec: Vec<u32>) -> Self {
        UBigInt(vec)
    }

    #[inline]
    pub fn into_raw(self) -> Vec<u32> {
        self.0
    }

}

impl Default for UBigInt {
    fn default() -> Self { UBigInt::zero() }
}