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}