vortex_array/vtable/
compute.rs

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