use crate::{Xsum, XsumAuto, XsumLarge, XsumSmall};
pub enum XsumVariant {
Small(XsumSmall),
Large(XsumLarge),
Auto(XsumAuto),
}
impl Xsum for XsumVariant {
fn new() -> Self {
Self::default()
}
fn add_list(&mut self, vec: &[f64]) {
match self {
Self::Small(xsum_small) => xsum_small.add_list(vec),
Self::Large(xsum_large) => xsum_large.add_list(vec),
Self::Auto(xsum_auto) => xsum_auto.add_list(vec),
}
}
fn add(&mut self, value: f64) {
match self {
Self::Small(xsum_small) => xsum_small.add(value),
Self::Large(xsum_large) => xsum_large.add(value),
Self::Auto(xsum_auto) => xsum_auto.add(value),
}
}
fn sum(&mut self) -> f64 {
match self {
Self::Small(xsum_small) => xsum_small.sum(),
Self::Large(xsum_large) => xsum_large.sum(),
Self::Auto(xsum_auto) => xsum_auto.sum(),
}
}
fn clear(&mut self) {
match self {
Self::Small(xsum_small) => xsum_small.clear(),
Self::Large(xsum_large) => xsum_large.clear(),
Self::Auto(xsum_auto) => xsum_auto.clear(),
}
}
}
impl Default for XsumVariant {
fn default() -> Self {
Self::Small(XsumSmall::new())
}
}