vortex_array/vtable/
compute.rs

1use crate::Array;
2use crate::compute::{
3    FillNullFn, IsConstantFn, IsSortedFn, LikeFn, MinMaxFn, OptimizeFn, ScalarAtFn, SearchSortedFn,
4    SearchSortedUsizeFn, SliceFn, TakeFn, TakeFromFn, ToArrowFn, UncompressedSizeFn,
5};
6
7/// VTable for dispatching compute functions to Vortex encodings.
8pub trait ComputeVTable {
9    /// Fill null values with given desired value. Resulting array is NonNullable
10    ///
11    /// See: [`FillNullFn`]
12    fn fill_null_fn(&self) -> Option<&dyn FillNullFn<&dyn Array>> {
13        None
14    }
15
16    /// Checks if an array is constant.
17    ///
18    /// See [`IsConstantFn`]
19    fn is_constant_fn(&self) -> Option<&dyn IsConstantFn<&dyn Array>> {
20        None
21    }
22
23    fn is_sorted_fn(&self) -> Option<&dyn IsSortedFn<&dyn Array>> {
24        None
25    }
26
27    /// Perform a SQL LIKE operation on two arrays.
28    ///
29    /// See: [`LikeFn`].
30    fn like_fn(&self) -> Option<&dyn LikeFn<&dyn Array>> {
31        None
32    }
33
34    /// Compute the min, max of an array.
35    ///
36    /// See: [`MinMaxFn`].
37    fn min_max_fn(&self) -> Option<&dyn MinMaxFn<&dyn Array>> {
38        None
39    }
40
41    /// Try and optimize the layout of an array.
42    ///
43    /// See: [`OptimizeFn`]
44    fn optimize_fn(&self) -> Option<&dyn OptimizeFn<&dyn Array>> {
45        None
46    }
47
48    /// Single item indexing on Vortex arrays.
49    ///
50    /// See: [`ScalarAtFn`].
51    fn scalar_at_fn(&self) -> Option<&dyn ScalarAtFn<&dyn Array>> {
52        None
53    }
54
55    /// Perform a search over an ordered array.
56    ///
57    /// See: [`SearchSortedFn`].
58    fn search_sorted_fn(&self) -> Option<&dyn SearchSortedFn<&dyn Array>> {
59        None
60    }
61
62    /// Perform a search over an ordered array.
63    ///
64    /// See: [`SearchSortedUsizeFn`].
65    fn search_sorted_usize_fn(&self) -> Option<&dyn SearchSortedUsizeFn<&dyn Array>> {
66        None
67    }
68
69    /// Perform zero-copy slicing of an array.
70    ///
71    /// See: [`SliceFn`].
72    fn slice_fn(&self) -> Option<&dyn SliceFn<&dyn Array>> {
73        None
74    }
75
76    /// Take a set of indices from an array. This often forces allocations and decoding of
77    /// the receiver.
78    ///
79    /// See: [`TakeFn`].
80    fn take_fn(&self) -> Option<&dyn TakeFn<&dyn Array>> {
81        None
82    }
83
84    fn take_from_fn(&self) -> Option<&dyn TakeFromFn<&dyn Array>> {
85        None
86    }
87
88    /// Convert the array to an Arrow array of the given type.
89    ///
90    /// See: [`ToArrowFn`].
91    fn to_arrow_fn(&self) -> Option<&dyn ToArrowFn<&dyn Array>> {
92        None
93    }
94
95    /// Approximates the uncompressed size of the array.
96    ///
97    /// See [`UncompressedSizeFn`]
98    fn uncompressed_size_fn(&self) -> Option<&dyn UncompressedSizeFn<&dyn Array>> {
99        None
100    }
101}