use apache_datasketches_sys::array_of_doubles_sketch::ffi as sys;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum ResizeFactor {
X1,
X2,
X4,
#[default]
X8,
}
impl From<ResizeFactor> for sys::TupleResizeFactor {
fn from(rf: ResizeFactor) -> Self {
match rf {
ResizeFactor::X1 => sys::TupleResizeFactor::X1,
ResizeFactor::X2 => sys::TupleResizeFactor::X2,
ResizeFactor::X4 => sys::TupleResizeFactor::X4,
ResizeFactor::X8 => sys::TupleResizeFactor::X8,
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct ArrayOfDoublesSketchBuilder {
lg_k: u8,
resize_factor: ResizeFactor,
p: f32,
num_values: u8,
}
impl Default for ArrayOfDoublesSketchBuilder {
fn default() -> Self {
Self {
lg_k: 12,
resize_factor: ResizeFactor::default(),
p: 1.0,
num_values: 1,
}
}
}
impl ArrayOfDoublesSketchBuilder {
pub fn new() -> Self {
Self::default()
}
pub fn lg_k(mut self, lg_k: u8) -> Self {
self.lg_k = lg_k;
self
}
pub fn resize_factor(mut self, resize_factor: ResizeFactor) -> Self {
self.resize_factor = resize_factor;
self
}
pub fn p(mut self, p: f32) -> Self {
self.p = p;
self
}
pub fn num_values(mut self, num_values: u8) -> Self {
self.num_values = num_values;
self
}
pub fn build(self) -> Result<super::ArrayOfDoublesSketch, crate::error::SketchError> {
super::ArrayOfDoublesSketch::from_parts(
self.lg_k,
self.resize_factor,
self.p,
self.num_values,
)
}
}