@@ -46,6 +46,7 @@ use crate::arrays::SliceArray;
4646use crate :: arrays:: StructVTable ;
4747use crate :: arrays:: VarBinVTable ;
4848use crate :: arrays:: VarBinViewVTable ;
49+ use crate :: buffer:: BufferHandle ;
4950use crate :: builders:: ArrayBuilder ;
5051use crate :: compute;
5152use crate :: compute:: ComputeFn ;
@@ -778,8 +779,8 @@ impl<V: VTable> ArrayVisitor for ArrayAdapter<V> {
778779 }
779780
780781 impl ArrayBufferVisitor for BufferCollector {
781- fn visit_buffer ( & mut self , buffer : & ByteBuffer ) {
782- self . buffers . push ( buffer . clone ( ) ) ;
782+ fn visit_buffer_handle ( & mut self , _name : & str , handle : & BufferHandle ) {
783+ self . buffers . push ( handle . to_host_sync ( ) ) ;
783784 }
784785 }
785786
@@ -790,6 +791,46 @@ impl<V: VTable> ArrayVisitor for ArrayAdapter<V> {
790791 collector. buffers
791792 }
792793
794+ fn buffer_handles ( & self ) -> Vec < BufferHandle > {
795+ struct BufferHandleCollector {
796+ handles : Vec < BufferHandle > ,
797+ }
798+
799+ impl ArrayBufferVisitor for BufferHandleCollector {
800+ fn visit_buffer_handle ( & mut self , _name : & str , handle : & BufferHandle ) {
801+ self . handles . push ( handle. clone ( ) ) ;
802+ }
803+ }
804+
805+ let mut collector = BufferHandleCollector {
806+ handles : Vec :: new ( ) ,
807+ } ;
808+ <V :: VisitorVTable as VisitorVTable < V > >:: visit_buffers ( & self . 0 , & mut collector) ;
809+ collector. handles
810+ }
811+
812+ fn buffer_names ( & self ) -> Vec < String > {
813+ <V :: VisitorVTable as VisitorVTable < V > >:: buffer_names ( & self . 0 )
814+ }
815+
816+ fn named_buffers ( & self ) -> Vec < ( String , BufferHandle ) > {
817+ struct NamedBufferCollector {
818+ buffers : Vec < ( String , BufferHandle ) > ,
819+ }
820+
821+ impl ArrayBufferVisitor for NamedBufferCollector {
822+ fn visit_buffer_handle ( & mut self , name : & str , handle : & BufferHandle ) {
823+ self . buffers . push ( ( name. to_string ( ) , handle. clone ( ) ) ) ;
824+ }
825+ }
826+
827+ let mut collector = NamedBufferCollector {
828+ buffers : Vec :: new ( ) ,
829+ } ;
830+ <V :: VisitorVTable as VisitorVTable < V > >:: visit_buffers ( & self . 0 , & mut collector) ;
831+ collector. buffers
832+ }
833+
793834 fn nbuffers ( & self ) -> usize {
794835 <V :: VisitorVTable as VisitorVTable < V > >:: nbuffers ( & self . 0 )
795836 }
0 commit comments