Skip to content

Commit ecb6bd0

Browse files
committed
feat: add an arrays slots macro
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
1 parent 12b3dd3 commit ecb6bd0

15 files changed

Lines changed: 29 additions & 36 deletions

File tree

encodings/alp/src/alp/array.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use vortex_array::ExecutionResult;
1818
use vortex_array::IntoArray;
1919
use vortex_array::Precision;
2020
use vortex_array::TypedArrayRef;
21+
use vortex_array::array_slots;
2122
use vortex_array::arrays::Primitive;
2223
use vortex_array::buffer::BufferHandle;
2324
use vortex_array::dtype::DType;
@@ -79,13 +80,14 @@ impl VTable for ALP {
7980
len: usize,
8081
slots: &[Option<ArrayRef>],
8182
) -> VortexResult<()> {
83+
let slots = ALPSlotsView::from_slots(slots);
8284
validate_parts(
8385
dtype,
8486
len,
8587
data.exponents,
86-
ALPSlotsView::from_slots(slots).encoded,
88+
slots.encoded,
8789
patches_from_slots(
88-
slots,
90+
&slots,
8991
data.patch_offset,
9092
data.patch_offset_within_chunk,
9193
len,
@@ -198,7 +200,7 @@ impl VTable for ALP {
198200
}
199201
}
200202

201-
#[vortex_array::array_slots(ALP)]
203+
#[array_slots(ALP)]
202204
pub struct ALPSlots {
203205
/// The ALP-encoded values array.
204206
pub encoded: ArrayRef,
@@ -425,7 +427,7 @@ pub trait ALPArrayExt: ALPArraySlotsExt {
425427

426428
fn patches(&self) -> Option<Patches> {
427429
patches_from_slots(
428-
self.as_ref().slots(),
430+
&self.slots_view(),
429431
self.patch_offset,
430432
self.patch_offset_within_chunk,
431433
self.as_ref().len(),
@@ -434,13 +436,12 @@ pub trait ALPArrayExt: ALPArraySlotsExt {
434436
}
435437

436438
fn patches_from_slots(
437-
slots: &[Option<ArrayRef>],
439+
slots: &ALPSlotsView,
438440
patch_offset: Option<usize>,
439441
patch_offset_within_chunk: Option<usize>,
440442
len: usize,
441443
) -> Option<Patches> {
442-
let view = ALPSlotsView::from_slots(slots);
443-
match (view.patch_indices, view.patch_values) {
444+
match (slots.patch_indices, slots.patch_values) {
444445
(Some(indices), Some(values)) => {
445446
let patch_offset = patch_offset.vortex_expect("has patch slots but no patch_offset");
446447
Some(unsafe {
@@ -449,7 +450,7 @@ fn patches_from_slots(
449450
patch_offset,
450451
indices.clone(),
451452
values.clone(),
452-
view.patch_chunk_offsets.cloned(),
453+
slots.patch_chunk_offsets.cloned(),
453454
patch_offset_within_chunk,
454455
)
455456
})

encodings/fastlanes/src/bitpacking/array/mod.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use fastlanes::BitPacking;
55
use vortex_array::ArrayRef;
66
use vortex_array::TypedArrayRef;
7+
use vortex_array::array_slots;
78
use vortex_array::arrays::Primitive;
89
use vortex_array::arrays::PrimitiveArray;
910
use vortex_array::buffer::BufferHandle;
@@ -24,10 +25,10 @@ pub mod unpack_iter;
2425

2526
use crate::BitPackedArray;
2627
use crate::bitpack_compress::bitpack_encode;
27-
use crate::unpack_iter::BitPacked;
28+
use crate::unpack_iter::BitPacked as BitPackedIter;
2829
use crate::unpack_iter::BitUnpackedChunks;
2930

30-
#[vortex_array::array_slots(crate::BitPacked)]
31+
#[array_slots(crate::BitPacked)]
3132
pub struct BitPackedSlots {
3233
/// The indices of exception values that don't fit in the bit-packed representation.
3334
pub patch_indices: Option<ArrayRef>,
@@ -209,7 +210,7 @@ impl BitPackedData {
209210
}
210211

211212
/// Accessor for bit unpacked chunks
212-
pub fn unpacked_chunks<T: BitPacked>(
213+
pub fn unpacked_chunks<T: BitPackedIter>(
213214
&self,
214215
dtype: &DType,
215216
len: usize,
@@ -318,7 +319,7 @@ pub trait BitPackedArrayExt: BitPackedArraySlotsExt {
318319
}
319320

320321
#[inline]
321-
fn unpacked_chunks<T: BitPacked>(&self) -> VortexResult<BitUnpackedChunks<T>> {
322+
fn unpacked_chunks<T: BitPackedIter>(&self) -> VortexResult<BitUnpackedChunks<T>> {
322323
BitPackedData::unpacked_chunks::<T>(self, self.as_ref().dtype(), self.as_ref().len())
323324
}
324325
}
@@ -335,7 +336,6 @@ mod test {
335336

336337
use crate::BitPackedData;
337338
use crate::bitpacking::array::BitPackedArrayExt;
338-
use crate::bitpacking::array::BitPackedArraySlotsExt;
339339

340340
#[test]
341341
fn test_encode() {

encodings/fastlanes/src/bitpacking/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ pub use array::BitPackedArrayExt;
66
pub use array::BitPackedArraySlotsExt;
77
pub use array::BitPackedData;
88
pub use array::BitPackedDataParts;
9+
pub use array::BitPackedSlots;
910
pub use array::bitpack_compress;
1011
pub use array::bitpack_decompress;
1112
pub use array::unpack_iter;

encodings/fastlanes/src/bitpacking/vtable/mod.rs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ use crate::BitPackedDataParts;
4343
use crate::bitpack_decompress::unpack_array;
4444
use crate::bitpack_decompress::unpack_into_primitive_builder;
4545
use crate::bitpacking::array::BitPackedSlots;
46+
use crate::bitpacking::array::BitPackedSlotsView;
4647
use crate::bitpacking::vtable::kernels::PARENT_KERNELS;
4748
use crate::bitpacking::vtable::rules::RULES;
4849
mod kernels;
@@ -100,14 +101,10 @@ impl VTable for BitPacked {
100101
len: usize,
101102
slots: &[Option<ArrayRef>],
102103
) -> VortexResult<()> {
103-
let validity = child_to_validity(
104-
&slots[BitPackedSlots::VALIDITY_CHILD].clone(),
105-
dtype.nullability(),
106-
);
107-
let patches = match (
108-
&slots[BitPackedSlots::PATCH_INDICES],
109-
&slots[BitPackedSlots::PATCH_VALUES],
110-
) {
104+
let slots = BitPackedSlotsView::from_slots(slots);
105+
106+
let validity = child_to_validity(&slots.validity_child.cloned(), dtype.nullability());
107+
let patches = match (slots.patch_indices, slots.patch_values) {
111108
(Some(indices), Some(values)) => {
112109
let patch_offset = data
113110
.patch_offset
@@ -118,7 +115,7 @@ impl VTable for BitPacked {
118115
patch_offset,
119116
indices.clone(),
120117
values.clone(),
121-
slots[BitPackedSlots::PATCH_CHUNK_OFFSETS].clone(),
118+
slots.patch_chunk_offsets.cloned(),
122119
data.patch_offset_within_chunk,
123120
)
124121
})

vortex-array/src/arrays/dict/compute/is_sorted.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ use crate::aggregate_fn::fns::is_sorted::is_sorted;
1111
use crate::aggregate_fn::fns::is_sorted::is_strict_sorted;
1212
use crate::aggregate_fn::kernels::DynAggregateKernel;
1313
use crate::arrays::Dict;
14-
use crate::arrays::dict::DictArrayExt;
1514
use crate::arrays::dict::DictArraySlotsExt;
1615
use crate::scalar::Scalar;
1716

vortex-array/src/arrays/dict/compute/mask.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ use crate::IntoArray;
88
use crate::array::ArrayView;
99
use crate::arrays::Dict;
1010
use crate::arrays::DictArray;
11-
use crate::arrays::dict::DictArrayExt;
1211
use crate::arrays::dict::DictArraySlotsExt;
1312
use crate::arrays::scalar_fn::ScalarFnFactoryExt;
1413
use crate::scalar_fn::EmptyOptions;

vortex-array/src/arrays/dict/compute/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ use crate::ArrayRef;
2222
use crate::ExecutionCtx;
2323
use crate::IntoArray;
2424
use crate::array::ArrayView;
25-
use crate::arrays::dict::DictArrayExt;
2625
use crate::arrays::dict::DictArraySlotsExt;
2726
use crate::arrays::filter::FilterReduce;
2827

vortex-array/src/arrays/dict/compute/rules.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ use crate::arrays::Dict;
1414
use crate::arrays::DictArray;
1515
use crate::arrays::ScalarFnArray;
1616
use crate::arrays::ScalarFnVTable;
17-
use crate::arrays::dict::DictArrayExt;
1817
use crate::arrays::dict::DictArraySlotsExt;
1918
use crate::arrays::filter::FilterReduceAdaptor;
2019
use crate::arrays::scalar_fn::AnyScalarFn;

vortex-array/src/arrays/dict/compute/slice.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ use crate::arrays::Constant;
1212
use crate::arrays::ConstantArray;
1313
use crate::arrays::Dict;
1414
use crate::arrays::DictArray;
15-
use crate::arrays::dict::DictArrayExt;
1615
use crate::arrays::dict::DictArraySlotsExt;
1716
use crate::arrays::slice::SliceReduce;
1817
use crate::scalar::Scalar;

vortex-array/src/arrays/dict/take.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ use crate::IntoArray;
1111
use crate::array::ArrayView;
1212
use crate::array::VTable;
1313
use crate::arrays::ConstantArray;
14-
use crate::arrays::dict::DictArrayExt;
1514
use crate::arrays::dict::DictArraySlotsExt;
1615
use crate::expr::stats::Precision;
1716
use crate::expr::stats::Stat;

0 commit comments

Comments
 (0)