dochy_diff 0.1.0

Calculates the diff of two Dochy Data.
Documentation
use dochy_compaction::kihon_enum::KVal;
use crate::diff_error::DiffError;
use with_capacity_safe::vec_with_capacity_safe;

pub struct Reader{
    vec : Vec<KVal>,
    ind : usize,
}

impl Reader{
    pub(crate) fn new(vec : Vec<KVal>) -> Reader{
        Reader{ vec, ind : 0 }
    }

    pub(crate) fn read(&mut self) -> Result<&KVal, DiffError>{
        let index = self.ind;

        self.ind += 1;
        Ok(self.vec.get(index).ok_or("reached the end of the data")?)
    }

    pub(crate) fn read_u64_array(&mut self) -> Result<Vec<u64>, DiffError>{
        let len = self.read()?.as_i64()? as usize;
        let mut vec = vec_with_capacity_safe(len)?;
        for _ in 0..len{
            vec.push(self.read()?.as_i64()? as u64);
        }
        Ok(vec)
    }

    pub(crate) fn read_usize_array(&mut self) -> Result<Vec<usize>, DiffError>{
        let len = self.read()?.as_i64()? as usize;
        let mut vec = vec_with_capacity_safe(len)?;
        for _ in 0..len{
            vec.push(self.read()?.as_i64()? as usize);
        }
        Ok(vec)
    }
}