Skip to content

Commit e0c2f5f

Browse files
committed
Move things around
Signed-off-by: Adam Gutglick <adam@spiraldb.com>
1 parent 3396728 commit e0c2f5f

4 files changed

Lines changed: 31 additions & 36 deletions

File tree

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

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,15 @@ impl ArrayParentReduceRule<Bool> for BoolMaskedValidityRule {
4545
return Ok(None);
4646
}
4747

48+
let bit_buffer = array.to_bit_buffer();
4849
// Merge the parent's validity mask into the child's validity
4950
// TODO(joe): make this lazy
51+
let validity = array.validity()?.and(parent.validity()?)?;
52+
5053
// Safety:
5154
// we know all elements are valid, the AND operation will fail if mismatched.
52-
unsafe {
53-
Ok(Some(
54-
BoolArray::new_unchecked(
55-
array.to_bit_buffer(),
56-
array.validity()?.and(parent.validity()?)?,
57-
)
58-
.into_array(),
59-
))
60-
}
55+
let array = unsafe { BoolArray::new_unchecked(bit_buffer, validity).into_array() };
56+
57+
Ok(Some(array))
6158
}
6259
}

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

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,13 @@ use crate::arrays::slice::SliceReduce;
1515

1616
impl SliceReduce for Bool {
1717
fn slice(array: ArrayView<'_, Bool>, range: Range<usize>) -> VortexResult<Option<ArrayRef>> {
18+
let bit_buffer = array.to_bit_buffer().slice(range.clone());
19+
let validity = array.validity()?.slice(range)?;
20+
1821
// Safety:
1922
// range is verified in the callers and is the same for both bits and validity.
20-
unsafe {
21-
Ok(Some(
22-
BoolArray::new_unchecked(
23-
array.to_bit_buffer().slice(range.clone()),
24-
array.validity()?.slice(range)?,
25-
)
26-
.into_array(),
27-
))
28-
}
23+
let array = unsafe { BoolArray::new_unchecked(bit_buffer, validity).into_array() };
24+
25+
Ok(Some(array))
2926
}
3027
}

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@ impl SliceReduce for Primitive {
1919
let values = array.buffer_handle().slice(byte_range);
2020
let validity = array.validity()?.slice(range)?;
2121

22-
// SAFETY: slicing an existing PrimitiveArray on element boundaries preserves the buffer
22+
// SAFETY:
23+
//slicing an existing PrimitiveArray on element boundaries preserves the buffer
2324
// alignment, ptype, length, and validity invariants.
24-
Ok(Some(
25-
unsafe { PrimitiveArray::new_unchecked_from_handle(values, array.ptype(), validity) }
26-
.into_array(),
27-
))
25+
let array = unsafe {
26+
PrimitiveArray::new_unchecked_from_handle(values, array.ptype(), validity).into_array()
27+
};
28+
29+
Ok(Some(array))
2830
}
2931
}

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

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,19 @@ use crate::arrays::varbinview::BinaryView;
1616

1717
impl SliceReduce for VarBinView {
1818
fn slice(array: ArrayView<'_, Self>, range: Range<usize>) -> VortexResult<Option<ArrayRef>> {
19+
let views = array
20+
.views_handle()
21+
.slice_typed::<BinaryView>(range.clone());
22+
let data_buffers = Arc::clone(array.data_buffers());
23+
let dtype = array.dtype().clone();
24+
let validity = array.validity()?.slice(range)?;
25+
1926
// Safety:
2027
// range is validated within bounds, and is shared between all children.
21-
unsafe {
22-
Ok(Some(
23-
VarBinViewArray::new_handle_unchecked(
24-
array
25-
.views_handle()
26-
.slice_typed::<BinaryView>(range.clone()),
27-
Arc::clone(array.data_buffers()),
28-
array.dtype().clone(),
29-
array.validity()?.slice(range)?,
30-
)
31-
.into_array(),
32-
))
33-
}
28+
let array = unsafe {
29+
VarBinViewArray::new_handle_unchecked(views, data_buffers, dtype, validity).into_array()
30+
};
31+
32+
Ok(Some(array))
3433
}
3534
}

0 commit comments

Comments
 (0)