vortex_array/vtable/
visitor.rs1use vortex_buffer::ByteBuffer;
2
3use crate::vtable::VTable;
4use crate::{Array, ArrayBufferVisitor, ArrayChildVisitor};
5
6pub trait VisitorVTable<V: VTable> {
7 fn visit_buffers(array: &V::Array, visitor: &mut dyn ArrayBufferVisitor);
9
10 fn nbuffers(array: &V::Array) -> usize {
12 struct NBuffers(usize);
13
14 impl ArrayBufferVisitor for NBuffers {
15 fn visit_buffer(&mut self, _buffer: &ByteBuffer) {
16 self.0 += 1;
17 }
18 }
19
20 let mut visitor = NBuffers(0);
21 <V::VisitorVTable as VisitorVTable<V>>::visit_buffers(array, &mut visitor);
22 visitor.0
23 }
24
25 fn visit_children(array: &V::Array, visitor: &mut dyn ArrayChildVisitor);
27
28 fn nchildren(array: &V::Array) -> usize {
30 struct NChildren(usize);
31
32 impl ArrayChildVisitor for NChildren {
33 fn visit_child(&mut self, _name: &str, _array: &dyn Array) {
34 self.0 += 1;
35 }
36 }
37
38 let mut visitor = NChildren(0);
39 <V::VisitorVTable as VisitorVTable<V>>::visit_children(array, &mut visitor);
40 visitor.0
41 }
42}