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}