vortex_mask/arrow.rs
1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use arrow_buffer::NullBuffer;
5
6use crate::Mask;
7
8impl From<Mask> for Option<NullBuffer> {
9 fn from(value: Mask) -> Self {
10 match value {
11 Mask::AllTrue(_) => None,
12 Mask::AllFalse(len) => Some(NullBuffer::new_null(len)),
13 Mask::Values(values) => {
14 // SAFETY: we maintain our own validated true count.
15 Some(unsafe {
16 NullBuffer::new_unchecked(
17 values.bit_buffer().clone().into(),
18 values.len() - values.true_count(),
19 )
20 })
21 }
22 }
23 }
24}