draco-oxide 0.1.0-alpha.5

draco-oxide is a rust rewrite of Google's draco mesh compression library.
Documentation
use super::PredictionTransformImpl;
use crate::core::shared::Vector;
use crate::prelude::{ByteWriter, NdVector};
use crate::utils::to_positive_i32_vec;

#[cfg(feature = "evaluation")]
use crate::eval;

pub struct Difference<const N: usize> {
    out: Vec<NdVector<N, i32>>,
}

impl<const N: usize> Difference<N> {
    pub fn new(_cfg: super::Config) -> Self {
        Self { out: Vec::new() }
    }
}

impl<const N: usize> PredictionTransformImpl<N> for Difference<N> {
    fn map_with_tentative_metadata(&mut self, orig: NdVector<N, i32>, pred: NdVector<N, i32>)
    where
        NdVector<N, i32>: Vector<N, Component = i32>,
    {
        let corr = orig - pred;
        let corr = to_positive_i32_vec(corr);

        self.out.push(corr);
    }

    fn squeeze<W>(self, _writer: &mut W) -> Vec<NdVector<N, i32>>
    where
        W: ByteWriter,
    {
        #[cfg(feature = "evaluation")]
        {
            eval::write_json_pair("transform  type", "Difference".into(), _writer);
            eval::array_scope_begin("transformed data", _writer);
            for &x in self.out.iter() {
                eval::write_arr_elem(x.into(), _writer);
            }
            eval::array_scope_end(_writer);
        }
        self.out
    }
}