use std::fmt::Debug; use tantivy_bitpacker::minmax; use crate::ColumnValues; /// VecColumn provides `Column` over a `Vec`. pub struct VecColumn { pub(crate) values: Vec, pub(crate) min_value: T, pub(crate) max_value: T, } impl ColumnValues for VecColumn { fn get_val(&self, position: u32) -> T { self.values[position as usize] } fn iter(&self) -> Box + '_> { Box::new(self.values.iter().copied()) } fn min_value(&self) -> T { self.min_value } fn max_value(&self) -> T { self.max_value } fn num_vals(&self) -> u32 { self.values.len() as u32 } fn get_range(&self, start: u64, output: &mut [T]) { output.copy_from_slice(&self.values[start as usize..][..output.len()]) } } impl From> for VecColumn { fn from(values: Vec) -> Self { let (min_value, max_value) = minmax(values.iter().copied()).unwrap_or_default(); Self { values, min_value, max_value, } } } impl From for Vec { fn from(column: VecColumn) -> Self { column.values } }