vortex_runend/compute/
mod.rs

1mod binary_numeric;
2mod compare;
3mod fill_null;
4pub(crate) mod filter;
5mod invert;
6mod is_sorted;
7mod min_max;
8mod scalar_at;
9mod slice;
10pub(crate) mod take;
11mod take_from;
12
13use vortex_array::compute::{
14    BinaryNumericFn, CompareFn, FillNullFn, FilterKernelAdapter, InvertFn, IsSortedFn, KernelRef,
15    MinMaxFn, ScalarAtFn, SliceFn, TakeFn, TakeFromFn,
16};
17use vortex_array::vtable::ComputeVTable;
18use vortex_array::{Array, ArrayComputeImpl};
19
20use crate::{RunEndArray, RunEndEncoding};
21
22impl ArrayComputeImpl for RunEndArray {
23    const FILTER: Option<KernelRef> = FilterKernelAdapter(RunEndEncoding).some();
24}
25
26impl ComputeVTable for RunEndEncoding {
27    fn binary_numeric_fn(&self) -> Option<&dyn BinaryNumericFn<&dyn Array>> {
28        Some(self)
29    }
30
31    fn compare_fn(&self) -> Option<&dyn CompareFn<&dyn Array>> {
32        Some(self)
33    }
34
35    fn fill_null_fn(&self) -> Option<&dyn FillNullFn<&dyn Array>> {
36        Some(self)
37    }
38
39    fn invert_fn(&self) -> Option<&dyn InvertFn<&dyn Array>> {
40        Some(self)
41    }
42
43    fn is_sorted_fn(&self) -> Option<&dyn IsSortedFn<&dyn Array>> {
44        Some(self)
45    }
46
47    fn scalar_at_fn(&self) -> Option<&dyn ScalarAtFn<&dyn Array>> {
48        Some(self)
49    }
50
51    fn slice_fn(&self) -> Option<&dyn SliceFn<&dyn Array>> {
52        Some(self)
53    }
54
55    fn take_fn(&self) -> Option<&dyn TakeFn<&dyn Array>> {
56        Some(self)
57    }
58
59    fn take_from_fn(&self) -> Option<&dyn TakeFromFn<&dyn Array>> {
60        Some(self)
61    }
62
63    fn min_max_fn(&self) -> Option<&dyn MinMaxFn<&dyn Array>> {
64        Some(self)
65    }
66}
67
68#[cfg(test)]
69mod test {
70    use vortex_array::Array;
71    use vortex_array::arrays::PrimitiveArray;
72    use vortex_array::compute::conformance::binary_numeric::test_binary_numeric;
73
74    use crate::RunEndArray;
75
76    fn ree_array() -> RunEndArray {
77        RunEndArray::encode(
78            PrimitiveArray::from_iter([1, 1, 1, 4, 4, 4, 2, 2, 5, 5, 5, 5]).into_array(),
79        )
80        .unwrap()
81    }
82
83    #[test]
84    fn test_runend_binary_numeric() {
85        let array = ree_array().into_array();
86        test_binary_numeric::<i32>(array)
87    }
88}