@@ -7,12 +7,10 @@ use vortex_dtype::{
77 NativePType , Nullability , PType , match_each_integer_ptype, match_each_native_ptype,
88 match_each_native_simd_ptype, match_each_unsigned_integer_ptype,
99} ;
10- use vortex_error:: { VortexResult , vortex_err} ;
11- use vortex_mask:: Mask ;
10+ use vortex_error:: VortexResult ;
1211
1312use crate :: arrays:: PrimitiveEncoding ;
1413use crate :: arrays:: primitive:: PrimitiveArray ;
15- use crate :: builders:: { ArrayBuilder , PrimitiveBuilder } ;
1614use crate :: compute:: TakeFn ;
1715use crate :: variants:: PrimitiveArrayTrait ;
1816use crate :: { Array , ArrayRef , ToCanonical } ;
@@ -51,43 +49,6 @@ impl TakeFn<&PrimitiveArray> for PrimitiveEncoding {
5149 } )
5250 } )
5351 }
54-
55- fn take_into (
56- & self ,
57- array : & PrimitiveArray ,
58- indices : & dyn Array ,
59- builder : & mut dyn ArrayBuilder ,
60- ) -> VortexResult < ( ) > {
61- let indices = indices. to_primitive ( ) ?;
62- let mask = array. validity ( ) . take ( & indices) ?. to_mask ( indices. len ( ) ) ?;
63-
64- match_each_native_ptype ! ( array. ptype( ) , |$T | {
65- match_each_integer_ptype!( indices. ptype( ) , |$I | {
66- take_into_impl( array. as_slice:: <$T >( ) , indices. as_slice:: <$I >( ) , mask, builder)
67- } )
68- } )
69- }
70- }
71-
72- fn take_into_impl < T : NativePType , I : NativePType + AsPrimitive < usize > > (
73- array : & [ T ] ,
74- indices : & [ I ] ,
75- mask : Mask ,
76- builder : & mut dyn ArrayBuilder ,
77- ) -> VortexResult < ( ) > {
78- assert_eq ! ( indices. len( ) , mask. len( ) ) ;
79-
80- let builder = builder
81- . as_any_mut ( )
82- . downcast_mut :: < PrimitiveBuilder < T > > ( )
83- . ok_or_else ( || {
84- vortex_err ! (
85- "Failed to downcast builder to PrimitiveBuilder<{}>" ,
86- T :: PTYPE
87- )
88- } ) ?;
89- builder. extend_with_iterator ( indices. iter ( ) . map ( |idx| array[ idx. as_ ( ) ] ) , mask) ;
90- Ok ( ( ) )
9152}
9253
9354fn take_primitive < T : NativePType , I : NativePType + AsPrimitive < usize > > (
@@ -167,14 +128,12 @@ where
167128#[ cfg( test) ]
168129mod test {
169130 use vortex_buffer:: buffer;
170- use vortex_dtype:: Nullability ;
171131 use vortex_scalar:: Scalar ;
172132
173133 use crate :: array:: Array ;
174134 use crate :: arrays:: primitive:: compute:: take:: take_primitive;
175135 use crate :: arrays:: { BoolArray , PrimitiveArray } ;
176- use crate :: builders:: { ArrayBuilder as _, PrimitiveBuilder } ;
177- use crate :: compute:: { take, take_into} ;
136+ use crate :: compute:: take;
178137 use crate :: validity:: Validity ;
179138
180139 #[ test]
@@ -201,50 +160,4 @@ mod test {
201160 // the third index is null
202161 assert_eq ! ( actual. scalar_at( 2 ) . unwrap( ) , Scalar :: null_typed:: <i32 >( ) ) ;
203162 }
204-
205- #[ test]
206- fn test_take_into ( ) {
207- let values = PrimitiveArray :: new ( buffer ! [ 1i32 , 2 , 3 , 4 , 5 ] , Validity :: NonNullable ) ;
208- let all_valid_indices = PrimitiveArray :: new (
209- buffer ! [ 0 , 3 , 4 ] ,
210- Validity :: Array ( BoolArray :: from_iter ( [ true , true , true ] ) . into_array ( ) ) ,
211- ) ;
212- let mut builder = PrimitiveBuilder :: < i32 > :: new ( Nullability :: Nullable ) ;
213- take_into ( & values, & all_valid_indices, & mut builder) . unwrap ( ) ;
214- let actual = builder. finish ( ) ;
215- assert_eq ! ( actual. scalar_at( 0 ) . unwrap( ) , Scalar :: from( Some ( 1 ) ) ) ;
216- assert_eq ! ( actual. scalar_at( 1 ) . unwrap( ) , Scalar :: from( Some ( 4 ) ) ) ;
217- assert_eq ! ( actual. scalar_at( 2 ) . unwrap( ) , Scalar :: from( Some ( 5 ) ) ) ;
218-
219- let mixed_valid_indices = PrimitiveArray :: new (
220- buffer ! [ 0 , 3 , 4 ] ,
221- Validity :: Array ( BoolArray :: from_iter ( [ true , true , false ] ) . into_array ( ) ) ,
222- ) ;
223- let mut builder = PrimitiveBuilder :: < i32 > :: new ( Nullability :: Nullable ) ;
224- take_into ( & values, & mixed_valid_indices, & mut builder) . unwrap ( ) ;
225- let actual = builder. finish ( ) ;
226- assert_eq ! ( actual. scalar_at( 0 ) . unwrap( ) , Scalar :: from( Some ( 1 ) ) ) ;
227- assert_eq ! ( actual. scalar_at( 1 ) . unwrap( ) , Scalar :: from( Some ( 4 ) ) ) ;
228- // the third index is null
229- assert_eq ! ( actual. scalar_at( 2 ) . unwrap( ) , Scalar :: null_typed:: <i32 >( ) ) ;
230-
231- let all_invalid_indices = PrimitiveArray :: new (
232- buffer ! [ 0 , 3 , 4 ] ,
233- Validity :: Array ( BoolArray :: from_iter ( [ false , false , false ] ) . into_array ( ) ) ,
234- ) ;
235- let mut builder = PrimitiveBuilder :: < i32 > :: new ( Nullability :: Nullable ) ;
236- take_into ( & values, & all_invalid_indices, & mut builder) . unwrap ( ) ;
237- let actual = builder. finish ( ) ;
238- assert_eq ! ( actual. scalar_at( 0 ) . unwrap( ) , Scalar :: null_typed:: <i32 >( ) ) ;
239- assert_eq ! ( actual. scalar_at( 1 ) . unwrap( ) , Scalar :: null_typed:: <i32 >( ) ) ;
240- assert_eq ! ( actual. scalar_at( 2 ) . unwrap( ) , Scalar :: null_typed:: <i32 >( ) ) ;
241-
242- let non_null_indices = PrimitiveArray :: new ( buffer ! [ 0 , 3 , 4 ] , Validity :: NonNullable ) ;
243- let mut builder = PrimitiveBuilder :: < i32 > :: new ( Nullability :: NonNullable ) ;
244- take_into ( & values, & non_null_indices, & mut builder) . unwrap ( ) ;
245- let actual = builder. finish ( ) ;
246- assert_eq ! ( actual. scalar_at( 0 ) . unwrap( ) , Scalar :: from( 1 ) ) ;
247- assert_eq ! ( actual. scalar_at( 1 ) . unwrap( ) , Scalar :: from( 4 ) ) ;
248- assert_eq ! ( actual. scalar_at( 2 ) . unwrap( ) , Scalar :: from( 5 ) ) ;
249- }
250163}
0 commit comments