vortex_array/arrays/masked/vtable/
operations.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use std::ops::Range;
5
6use vortex_scalar::Scalar;
7
8use crate::arrays::MaskedVTable;
9use crate::arrays::masked::MaskedArray;
10use crate::stats::ArrayStats;
11use crate::vtable::OperationsVTable;
12use crate::{ArrayRef, IntoArray};
13
14impl OperationsVTable<MaskedVTable> for MaskedVTable {
15    fn slice(array: &MaskedArray, range: Range<usize>) -> ArrayRef {
16        let child = array.child.slice(range.clone());
17        let validity = array.validity.slice(range);
18
19        MaskedArray {
20            child,
21            validity,
22            dtype: array.dtype.clone(),
23            stats: ArrayStats::default(),
24        }
25        .into_array()
26    }
27
28    fn scalar_at(array: &MaskedArray, index: usize) -> Scalar {
29        // Invalid indices are handled by the entrypoint function.
30        array.child.scalar_at(index).into_nullable()
31    }
32}