vortex_array/arrays/chunked/vtable/
validity.rs1use 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}