Skip to main content

vortex_array/arrays/chunked/vtable/
visitor.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use crate::ArrayBufferVisitor;
5use crate::ArrayChildVisitor;
6use crate::ArrayChildVisitorUnnamed;
7use crate::arrays::ChunkedArray;
8use crate::arrays::ChunkedVTable;
9use crate::vtable::VisitorVTable;
10
11impl VisitorVTable<ChunkedVTable> for ChunkedVTable {
12    fn visit_buffers(_array: &ChunkedArray, _visitor: &mut dyn ArrayBufferVisitor) {}
13
14    fn nbuffers(_array: &ChunkedArray) -> usize {
15        0
16    }
17
18    fn visit_children(array: &ChunkedArray, visitor: &mut dyn ArrayChildVisitor) {
19        visitor.visit_child("chunk_offsets", &array.chunk_offsets.to_array());
20
21        for (idx, chunk) in array.chunks().iter().enumerate() {
22            visitor.visit_child(format!("chunks[{idx}]").as_str(), chunk);
23        }
24    }
25
26    fn visit_children_unnamed(array: &ChunkedArray, visitor: &mut dyn ArrayChildVisitorUnnamed) {
27        visitor.visit_child(&array.chunk_offsets.to_array());
28
29        for chunk in array.chunks().iter() {
30            visitor.visit_child(chunk);
31        }
32    }
33
34    fn nchildren(array: &ChunkedArray) -> usize {
35        1 + array.chunks().len()
36    }
37
38    fn nth_child(array: &ChunkedArray, idx: usize) -> Option<crate::ArrayRef> {
39        match idx {
40            0 => Some(array.chunk_offsets.to_array()),
41            n => array.chunks().get(n - 1).cloned(),
42        }
43    }
44}