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}