vortex_fastlanes/bitpacking/vtable/
visitor.rs1use vortex_array::ArrayBufferVisitor;
5use vortex_array::ArrayChildVisitor;
6use vortex_array::vtable::ValidityHelper;
7use vortex_array::vtable::VisitorVTable;
8use vortex_array::vtable::validity_nchildren;
9
10use crate::BitPackedArray;
11use crate::BitPackedVTable;
12
13impl VisitorVTable<BitPackedVTable> for BitPackedVTable {
14 fn visit_buffers(array: &BitPackedArray, visitor: &mut dyn ArrayBufferVisitor) {
15 visitor.visit_buffer_handle("packed", array.packed());
16 }
17
18 fn nbuffers(_array: &BitPackedArray) -> usize {
19 1
20 }
21
22 fn visit_children(array: &BitPackedArray, visitor: &mut dyn ArrayChildVisitor) {
23 if let Some(patches) = array.patches() {
24 visitor.visit_patches(patches);
25 }
26 visitor.visit_validity(array.validity(), array.len());
27 }
28
29 fn nchildren(array: &BitPackedArray) -> usize {
30 array
32 .patches()
33 .map_or(0, |p| 2 + p.chunk_offsets().is_some() as usize)
34 + validity_nchildren(array.validity())
35 }
36}