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}