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;
8use crate::arrays::ChunkedVTable;
9use crate::vtable::ValidityVTable;
10
11impl ValidityVTable<ChunkedVTable> for ChunkedVTable {
12    fn is_valid(array: &ChunkedArray, index: usize) -> bool {
13        if !array.dtype.is_nullable() {
14            return true;
15        }
16        let (chunk, offset_in_chunk) = array.find_chunk_idx(index);
17        array.chunk(chunk).is_valid(offset_in_chunk)
18    }
19
20    fn all_valid(array: &ChunkedArray) -> bool {
21        if !array.dtype().is_nullable() {
22            return true;
23        }
24        for chunk in array.non_empty_chunks() {
25            if !chunk.all_valid() {
26                return false;
27            }
28        }
29        true
30    }
31
32    fn all_invalid(array: &ChunkedArray) -> bool {
33        if !array.dtype().is_nullable() {
34            return false;
35        }
36        for chunk in array.non_empty_chunks() {
37            if !chunk.all_invalid() {
38                return false;
39            }
40        }
41        true
42    }
43
44    fn validity_mask(array: &ChunkedArray) -> Mask {
45        array.chunks().iter().map(|a| a.validity_mask()).collect()
46    }
47}