33
44use fastlanes:: FastLanes ;
55use vortex_array:: ArrayRef ;
6+ use vortex_array:: DynArray ;
67use vortex_array:: ExecutionCtx ;
78use vortex_array:: IntoArray ;
89use vortex_array:: arrays:: PrimitiveArray ;
@@ -12,7 +13,7 @@ use vortex_array::match_each_unsigned_integer_ptype;
1213use vortex_array:: stats:: ArrayStats ;
1314use vortex_error:: VortexExpect as _;
1415use vortex_error:: VortexResult ;
15- use vortex_error:: vortex_bail ;
16+ use vortex_error:: vortex_ensure ;
1617
1718pub mod delta_compress;
1819pub mod delta_decompress;
@@ -90,50 +91,37 @@ impl DeltaArray {
9091 offset : usize ,
9192 logical_len : usize ,
9293 ) -> VortexResult < Self > {
93- if offset >= 1024 {
94- vortex_bail ! ( "offset must be less than 1024: {}" , offset) ;
95- }
96- if offset + logical_len > deltas. len ( ) {
97- vortex_bail ! (
98- "offset + logical_len, {} + {}, must be less than or equal to the size of deltas: {}" ,
99- offset,
100- logical_len,
101- deltas. len( )
102- )
103- }
104- if !bases. dtype ( ) . eq_ignore_nullability ( deltas. dtype ( ) ) {
105- vortex_bail ! (
106- "DeltaArray: bases and deltas must have the same dtype, got {:?} and {:?}" ,
107- bases. dtype( ) ,
108- deltas. dtype( )
109- ) ;
110- }
111- let DType :: Primitive ( ptype, _) = bases. dtype ( ) . clone ( ) else {
112- vortex_bail ! (
113- "DeltaArray: dtype must be an integer, got {}" ,
114- bases. dtype( )
115- ) ;
116- } ;
117-
118- if !ptype. is_int ( ) {
119- vortex_bail ! ( "DeltaArray: ptype must be an integer, got {}" , ptype) ;
120- }
121-
122- let lanes = lane_count ( ptype) ;
123-
124- if !deltas. len ( ) . is_multiple_of ( 1024 ) {
125- vortex_bail ! (
126- "deltas length ({}) must be a multiple of 1024" ,
127- deltas. len( ) ,
128- ) ;
129- }
130- if !bases. len ( ) . is_multiple_of ( lanes) {
131- vortex_bail ! (
132- "bases length ({}) must be a multiple of LANES ({})" ,
133- bases. len( ) ,
134- lanes,
135- ) ;
136- }
94+ vortex_ensure ! ( offset < 1024 , "offset must be less than 1024: {offset}" ) ;
95+ vortex_ensure ! (
96+ offset + logical_len <= deltas. len( ) ,
97+ "offset + logical_len, {offset} + {logical_len}, must be less than or equal to the size of deltas: {}" ,
98+ deltas. len( )
99+ ) ;
100+ vortex_ensure ! (
101+ bases. dtype( ) . eq_ignore_nullability( deltas. dtype( ) ) ,
102+ "DeltaArray: bases and deltas must have the same dtype, got {} and {}" ,
103+ bases. dtype( ) ,
104+ deltas. dtype( )
105+ ) ;
106+
107+ vortex_ensure ! (
108+ bases. dtype( ) . is_int( ) ,
109+ "DeltaArray: dtype must be an integer, got {}" ,
110+ bases. dtype( )
111+ ) ;
112+
113+ let lanes = lane_count ( bases. dtype ( ) . as_ptype ( ) ) ;
114+
115+ vortex_ensure ! (
116+ deltas. len( ) . is_multiple_of( 1024 ) ,
117+ "deltas length ({}) must be a multiple of 1024" ,
118+ deltas. len( ) ,
119+ ) ;
120+ vortex_ensure ! (
121+ bases. len( ) . is_multiple_of( lanes) ,
122+ "bases length ({}) must be a multiple of LANES ({lanes})" ,
123+ bases. len( ) ,
124+ ) ;
137125
138126 // SAFETY: validation done above
139127 Ok ( unsafe { Self :: new_unchecked ( bases, deltas, offset, logical_len) } )
@@ -167,9 +155,7 @@ impl DeltaArray {
167155
168156 #[ inline]
169157 pub ( crate ) fn lanes ( & self ) -> usize {
170- let ptype =
171- PType :: try_from ( self . dtype ( ) ) . vortex_expect ( "DeltaArray DType must be primitive" ) ;
172- lane_count ( ptype)
158+ lane_count ( self . dtype ( ) . as_ptype ( ) )
173159 }
174160
175161 #[ inline]
0 commit comments