@@ -582,7 +582,6 @@ fn filter_native<T: ArrowNativeType>(values: &[T], predicate: &FilterPredicate)
582
582
}
583
583
IterationStrategy :: Indices ( indices) => {
584
584
let iter = indices. iter ( ) . map ( |x| values[ * x] ) ;
585
-
586
585
// SAFETY: `Vec::iter` is trusted length
587
586
unsafe { MutableBuffer :: from_trusted_len_iter ( iter) }
588
587
}
@@ -618,8 +617,8 @@ where
618
617
struct FilterBytes < ' a , OffsetSize > {
619
618
src_offsets : & ' a [ OffsetSize ] ,
620
619
src_values : & ' a [ u8 ] ,
621
- dst_offsets : MutableBuffer ,
622
- dst_values : MutableBuffer ,
620
+ dst_offsets : Vec < OffsetSize > ,
621
+ dst_values : Vec < u8 > ,
623
622
cur_offset : OffsetSize ,
624
623
}
625
624
@@ -631,10 +630,10 @@ where
631
630
where
632
631
T : ByteArrayType < Offset = OffsetSize > ,
633
632
{
634
- let num_offsets_bytes = ( capacity + 1 ) * std:: mem:: size_of :: < OffsetSize > ( ) ;
635
- let mut dst_offsets = MutableBuffer :: new ( num_offsets_bytes) ;
636
- let dst_values = MutableBuffer :: new ( 0 ) ;
633
+ let dst_values = Vec :: new ( ) ;
634
+ let mut dst_offsets: Vec < OffsetSize > = Vec :: with_capacity ( capacity + 1 ) ;
637
635
let cur_offset = OffsetSize :: from_usize ( 0 ) . unwrap ( ) ;
636
+
638
637
dst_offsets. push ( cur_offset) ;
639
638
640
639
Self {
@@ -664,13 +663,15 @@ where
664
663
665
664
/// Extends the in-progress array by the indexes in the provided iterator
666
665
fn extend_idx ( & mut self , iter : impl Iterator < Item = usize > ) {
667
- for idx in iter {
668
- let ( start, end, len) = self . get_value_range ( idx) ;
666
+ self . dst_offsets . extend ( iter. map ( |idx| {
667
+ let start = self . src_offsets [ idx] . as_usize ( ) ;
668
+ let end = self . src_offsets [ idx + 1 ] . as_usize ( ) ;
669
+ let len = OffsetSize :: from_usize ( end - start) . expect ( "illegal offset range" ) ;
669
670
self . cur_offset += len;
670
- self . dst_offsets . push ( self . cur_offset ) ;
671
671
self . dst_values
672
672
. extend_from_slice ( & self . src_values [ start..end] ) ;
673
- }
673
+ self . cur_offset
674
+ } ) ) ;
674
675
}
675
676
676
677
/// Extends the in-progress array by the ranges in the provided iterator
0 commit comments