vortex_array/vtable/
compute.rs

1use crate::Array;
2use crate::compute::{
3    BetweenFn, BinaryBooleanFn, BinaryNumericFn, CastFn, CompareFn, FillForwardFn, FillNullFn,
4    FilterFn, InvertFn, IsConstantFn, LikeFn, MaskFn, MinMaxFn, ScalarAtFn, SearchSortedFn,
5    SearchSortedUsizeFn, SliceFn, SumFn, TakeFn, TakeFromFn, ToArrowFn, UncompressedSizeFn,
6};
7
8/// VTable for dispatching compute functions to Vortex encodings.
9pub trait ComputeVTable {
10    /// A ternary operator, returning bool if the values are between the other two given values.
11    ///
12    /// See: [`BetweenFn`].
13    fn between_fn(&self) -> Option<&dyn BetweenFn<&dyn Array>> {
14        None
15    }
16
17    /// Implementation of binary boolean logic operations.
18    ///
19    /// See: [`BinaryBooleanFn`].
20    fn binary_boolean_fn(&self) -> Option<&dyn BinaryBooleanFn<&dyn Array>> {
21        None
22    }
23
24    /// Implementation of binary numeric operations.
25    ///
26    /// See: [`BinaryNumericFn`].
27    fn binary_numeric_fn(&self) -> Option<&dyn BinaryNumericFn<&dyn Array>> {
28        None
29    }
30
31    /// Implemented for arrays that can be casted to different types.
32    ///
33    /// See: [`CastFn`].
34    fn cast_fn(&self) -> Option<&dyn CastFn<&dyn Array>> {
35        None
36    }
37
38    /// Binary operator implementation for arrays against other arrays.
39    ///
40    /// See: [`CompareFn`].
41    fn compare_fn(&self) -> Option<&dyn CompareFn<&dyn Array>> {
42        None
43    }
44
45    /// Array function that returns new arrays a non-null value is repeated across runs of nulls.
46    ///
47    /// See: [`FillForwardFn`].
48    fn fill_forward_fn(&self) -> Option<&dyn FillForwardFn<&dyn Array>> {
49        None
50    }
51
52    /// Fill null values with given desired value. Resulting array is NonNullable
53    ///
54    /// See: [`FillNullFn`]
55    fn fill_null_fn(&self) -> Option<&dyn FillNullFn<&dyn Array>> {
56        None
57    }
58
59    /// Filter an array with a given mask.
60    ///
61    /// See: [`FilterFn`].
62    fn filter_fn(&self) -> Option<&dyn FilterFn<&dyn Array>> {
63        None
64    }
65
66    /// Invert a boolean array. Converts true -> false, false -> true, null -> null.
67    ///
68    /// See [`InvertFn`]
69    fn invert_fn(&self) -> Option<&dyn InvertFn<&dyn Array>> {
70        None
71    }
72
73    /// Checks if an array is constant.
74    ///
75    /// See [`IsConstantFn`]
76    fn is_constant_fn(&self) -> Option<&dyn IsConstantFn<&dyn Array>> {
77        None
78    }
79
80    /// Perform a SQL LIKE operation on two arrays.
81    ///
82    /// See: [`LikeFn`].
83    fn like_fn(&self) -> Option<&dyn LikeFn<&dyn Array>> {
84        None
85    }
86
87    /// Replace masked values with null.
88    ///
89    /// This operation does not change the length of the array.
90    ///
91    /// See: [`MaskFn`].
92    fn mask_fn(&self) -> Option<&dyn MaskFn<&dyn Array>> {
93        None
94    }
95
96    /// Compute the min, max of an array.
97    fn min_max_fn(&self) -> Option<&dyn MinMaxFn<&dyn Array>> {
98        None
99    }
100
101    /// Single item indexing on Vortex arrays.
102    ///
103    /// See: [`ScalarAtFn`].
104    fn scalar_at_fn(&self) -> Option<&dyn ScalarAtFn<&dyn Array>> {
105        None
106    }
107
108    /// Perform a search over an ordered array.
109    ///
110    /// See: [`SearchSortedFn`].
111    fn search_sorted_fn(&self) -> Option<&dyn SearchSortedFn<&dyn Array>> {
112        None
113    }
114
115    /// Perform a search over an ordered array.
116    ///
117    /// See: [`SearchSortedUsizeFn`].
118    fn search_sorted_usize_fn(&self) -> Option<&dyn SearchSortedUsizeFn<&dyn Array>> {
119        None
120    }
121
122    /// Perform zero-copy slicing of an array.
123    ///
124    /// See: [`SliceFn`].
125    fn slice_fn(&self) -> Option<&dyn SliceFn<&dyn Array>> {
126        None
127    }
128
129    /// Perform a sum of an array.
130    ///
131    /// See: [SumFn].
132    fn sum_fn(&self) -> Option<&dyn SumFn<&dyn Array>> {
133        None
134    }
135
136    /// Take a set of indices from an array. This often forces allocations and decoding of
137    /// the receiver.
138    ///
139    /// See: [`TakeFn`].
140    fn take_fn(&self) -> Option<&dyn TakeFn<&dyn Array>> {
141        None
142    }
143
144    fn take_from_fn(&self) -> Option<&dyn TakeFromFn<&dyn Array>> {
145        None
146    }
147
148    /// Convert the array to an Arrow array of the given type.
149    ///
150    /// See: [`ToArrowFn`].
151    fn to_arrow_fn(&self) -> Option<&dyn ToArrowFn<&dyn Array>> {
152        None
153    }
154
155    /// Approximates the uncompressed size of the array.
156    ///
157    /// See [`UncompressedSizeFn`]
158    fn uncompressed_size_fn(&self) -> Option<&dyn UncompressedSizeFn<&dyn Array>> {
159        None
160    }
161}