Skip to content

Commit b7a1ab9

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

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
@@ -20,6 +20,7 @@ use vortex_array::ExecutionResult;
2020
use vortex_array::IntoArray;
2121
use vortex_array::Precision;
2222
use vortex_array::TypedArrayRef;
23+
use vortex_array::array_slots;
2324
use vortex_array::arrays::Primitive;
2425
use vortex_array::buffer::BufferHandle;
2526
use vortex_array::dtype::DType;
@@ -81,13 +82,14 @@ impl VTable for ALP {
8182
len: usize,
8283
slots: &[Option<ArrayRef>],
8384
) -> VortexResult<()> {
85+
let slots = ALPSlotsView::from_slots(slots);
8486
validate_parts(
8587
dtype,
8688
len,
8789
data.exponents,
88-
ALPSlotsView::from_slots(slots).encoded,
90+
slots.encoded,
8991
patches_from_slots(
90-
slots,
92+
&slots,
9193
data.patch_offset,
9294
data.patch_offset_within_chunk,
9395
len,
@@ -203,7 +205,7 @@ impl VTable for ALP {
203205
}
204206
}
205207

206-
#[vortex_array::array_slots(ALP)]
208+
#[array_slots(ALP)]
207209
pub struct ALPSlots {
208210
/// The ALP-encoded values array.
209211
pub encoded: ArrayRef,
@@ -440,7 +442,7 @@ pub trait ALPArrayExt: ALPArraySlotsExt {
440442

441443
fn patches(&self) -> Option<Patches> {
442444
patches_from_slots(
443-
self.as_ref().slots(),
445+
&self.slots_view(),
444446
self.patch_offset,
445447
self.patch_offset_within_chunk,
446448
self.as_ref().len(),
@@ -449,13 +451,12 @@ pub trait ALPArrayExt: ALPArraySlotsExt {
449451
}
450452

451453
fn patches_from_slots(
452-
slots: &[Option<ArrayRef>],
454+
slots: &ALPSlotsView,
453455
patch_offset: Option<usize>,
454456
patch_offset_within_chunk: Option<usize>,
455457
len: usize,
456458
) -> Option<Patches> {
457-
let view = ALPSlotsView::from_slots(slots);
458-
match (view.patch_indices, view.patch_values) {
459+
match (slots.patch_indices, slots.patch_values) {
459460
(Some(indices), Some(values)) => {
460461
let patch_offset = patch_offset.vortex_expect("has patch slots but no patch_offset");
461462
Some(unsafe {
@@ -464,7 +465,7 @@ fn patches_from_slots(
464465
patch_offset,
465466
indices.clone(),
466467
values.clone(),
467-
view.patch_chunk_offsets.cloned(),
468+
slots.patch_chunk_offsets.cloned(),
468469
patch_offset_within_chunk,
469470
)
470471
})

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use std::fmt::Formatter;
77
use fastlanes::BitPacking;
88
use vortex_array::ArrayRef;
99
use vortex_array::TypedArrayRef;
10+
use vortex_array::array_slots;
1011
use vortex_array::arrays::Primitive;
1112
use vortex_array::arrays::PrimitiveArray;
1213
use vortex_array::buffer::BufferHandle;
@@ -27,10 +28,10 @@ pub mod unpack_iter;
2728

2829
use crate::BitPackedArray;
2930
use crate::bitpack_compress::bitpack_encode;
30-
use crate::unpack_iter::BitPacked;
31+
use crate::unpack_iter::BitPacked as BitPackedIter;
3132
use crate::unpack_iter::BitUnpackedChunks;
3233

33-
#[vortex_array::array_slots(crate::BitPacked)]
34+
#[array_slots(crate::BitPacked)]
3435
pub struct BitPackedSlots {
3536
/// The indices of exception values that don't fit in the bit-packed representation.
3637
pub patch_indices: Option<ArrayRef>,
@@ -218,7 +219,7 @@ impl BitPackedData {
218219
}
219220

220221
/// Accessor for bit unpacked chunks
221-
pub fn unpacked_chunks<T: BitPacked>(
222+
pub fn unpacked_chunks<T: BitPackedIter>(
222223
&self,
223224
dtype: &DType,
224225
len: usize,
@@ -327,7 +328,7 @@ pub trait BitPackedArrayExt: BitPackedArraySlotsExt {
327328
}
328329

329330
#[inline]
330-
fn unpacked_chunks<T: BitPacked>(&self) -> VortexResult<BitUnpackedChunks<T>> {
331+
fn unpacked_chunks<T: BitPackedIter>(&self) -> VortexResult<BitUnpackedChunks<T>> {
331332
BitPackedData::unpacked_chunks::<T>(self, self.as_ref().dtype(), self.as_ref().len())
332333
}
333334
}
@@ -344,7 +345,6 @@ mod test {
344345

345346
use crate::BitPackedData;
346347
use crate::bitpacking::array::BitPackedArrayExt;
347-
use crate::bitpacking::array::BitPackedArraySlotsExt;
348348

349349
#[test]
350350
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)