vortex_array/arrays/chunked/vtable/
validity.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use vortex_mask::Mask;
5
6use crate::Array;
7use crate::arrays::{ChunkedArray, ChunkedVTable};
8use crate::vtable::ValidityVTable;
9
10impl ValidityVTable<ChunkedVTable> for ChunkedVTable {
11    fn is_valid(array: &ChunkedArray, index: usize) -> bool {
12        if !array.dtype.is_nullable() {
13            return true;
14        }
15        let (chunk, offset_in_chunk) = array.find_chunk_idx(index);
16        array.chunk(chunk).is_valid(offset_in_chunk)
17    }
18
19    fn all_valid(array: &ChunkedArray) -> bool {
20        if !array.dtype().is_nullable() {
21            return true;
22        }
23        for chunk in array.non_empty_chunks() {
24            if !chunk.all_valid() {
25                return false;
26            }
27        }
28        true
29    }
30
31    fn all_invalid(array: &ChunkedArray) -> bool {
32        if !array.dtype().is_nullable() {
33            return false;
34        }
35        for chunk in array.non_empty_chunks() {
36            if !chunk.all_invalid() {
37                return false;
38            }
39        }
40        true
41    }
42
43    fn validity_mask(array: &ChunkedArray) -> Mask {
44        array.chunks().iter().map(|a| a.validity_mask()).collect()
45    }
46}