vortex_vector/bool/
scalar.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use crate::bool::BoolVectorMut;
5use crate::{Scalar, ScalarOps, VectorMut, VectorMutOps};
6
7/// A scalar value for boolean types.
8#[derive(Debug)]
9pub struct BoolScalar(Option<bool>);
10
11impl From<Option<bool>> for BoolScalar {
12    fn from(value: Option<bool>) -> Self {
13        Self(value)
14    }
15}
16
17impl ScalarOps for BoolScalar {
18    fn is_valid(&self) -> bool {
19        self.0.is_some()
20    }
21
22    fn repeat(&self, n: usize) -> VectorMut {
23        let mut vec = BoolVectorMut::with_capacity(n);
24        match self.0 {
25            None => vec.append_nulls(n),
26            Some(value) => vec.append_values(value, n),
27        }
28        vec.into()
29    }
30}
31
32impl From<BoolScalar> for Scalar {
33    fn from(val: BoolScalar) -> Self {
34        Scalar::Bool(val)
35    }
36}