@@ -3,16 +3,10 @@ use std::cmp::min;
33use arrow_buffer:: buffer:: BooleanBuffer ;
44use arrow_buffer:: BooleanBufferBuilder ;
55use num_traits:: { AsPrimitive , FromPrimitive } ;
6- use vortex_array:: array:: { BoolArray , PrimitiveArray } ;
7- use vortex_array:: validity:: Validity ;
8- use vortex_array:: variants:: PrimitiveArrayTrait ;
9- use vortex_dtype:: { match_each_integer_ptype, NativePType } ;
10- use vortex_error:: { vortex_panic, VortexExpect as _, VortexResult } ;
11-
12- pub fn runend_bool_encode ( elements : & BoolArray ) -> ( PrimitiveArray , bool ) {
13- let ( arr, start) = runend_bool_encode_slice ( & elements. boolean_buffer ( ) ) ;
14- ( arr. into ( ) , start)
15- }
6+ use vortex_dtype:: NativePType ;
7+ use vortex_error:: { vortex_panic, VortexExpect as _} ;
8+
9+ use crate :: value_at_index;
1610
1711pub fn runend_bool_encode_slice ( elements : & BooleanBuffer ) -> ( Vec < u64 > , bool ) {
1812 let mut iter = elements. set_slices ( ) ;
@@ -41,19 +35,6 @@ pub fn runend_bool_encode_slice(elements: &BooleanBuffer) -> (Vec<u64>, bool) {
4135 ( ends, first_bool)
4236}
4337
44- pub fn runend_bool_decode (
45- run_ends : & PrimitiveArray ,
46- start : bool ,
47- validity : Validity ,
48- offset : usize ,
49- length : usize ,
50- ) -> VortexResult < BoolArray > {
51- match_each_integer_ptype ! ( run_ends. ptype( ) , |$E | {
52- let bools = runend_bool_decode_slice:: <$E >( run_ends. maybe_null_slice( ) , start, offset, length) ;
53- Ok ( BoolArray :: try_new( bools, validity) ?)
54- } )
55- }
56-
5738pub fn runend_bool_decode_slice < E : NativePType + AsPrimitive < usize > + FromPrimitive + Ord > (
5839 run_ends : & [ E ] ,
5940 start : bool ,
@@ -86,28 +67,19 @@ pub fn runend_bool_decode_slice<E: NativePType + AsPrimitive<usize> + FromPrimit
8667 BooleanBuffer :: from ( decoded)
8768}
8869
89- pub fn value_at_index ( idx : usize , start : bool ) -> bool {
90- if idx % 2 == 0 {
91- start
92- } else {
93- !start
94- }
95- }
96-
9770#[ cfg( test) ]
9871mod test {
9972 use arrow_buffer:: BooleanBuffer ;
10073 use itertools:: Itertools ;
10174 use rand:: prelude:: StdRng ;
10275 use rand:: { Rng , SeedableRng } ;
103- use vortex_array:: array:: BoolArray ;
76+ use vortex_array:: array:: { BoolArray , PrimitiveArray } ;
10477 use vortex_array:: compute:: SliceFn ;
10578 use vortex_array:: validity:: Validity ;
10679 use vortex_array:: IntoArrayVariant ;
10780
108- use crate :: compress:: {
109- runend_bool_decode, runend_bool_decode_slice, runend_bool_encode, runend_bool_encode_slice,
110- } ;
81+ use crate :: compress:: { runend_bool_decode_slice, runend_bool_encode_slice} ;
82+ use crate :: decode_runend_bool;
11183
11284 #[ test]
11385 fn encode_bool ( ) {
@@ -175,9 +147,10 @@ mod test {
175147 let input = ( 0 ..1024 * 8 - 61 ) . map ( |_x| rng. gen :: < bool > ( ) ) . collect_vec ( ) ;
176148 let b = BoolArray :: from_iter ( input. clone ( ) ) ;
177149 let b = b. slice ( 3 , 1024 * 8 - 66 ) . unwrap ( ) . into_bool ( ) . unwrap ( ) ;
178- let ( ends, start) = runend_bool_encode ( & b) ;
150+ let ( ends, start) = runend_bool_encode_slice ( & b. boolean_buffer ( ) ) ;
151+ let ends = PrimitiveArray :: from ( ends) ;
179152
180- let decoded = runend_bool_decode ( & ends, start, Validity :: NonNullable , 0 , 1024 * 8 - 69 )
153+ let decoded = decode_runend_bool ( & ends, start, Validity :: NonNullable , 0 , 1024 * 8 - 69 )
181154 . unwrap ( )
182155 . into_bool ( )
183156 . unwrap ( )
0 commit comments