vortex_vector/listview/
scalar.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use crate::Scalar;
5use crate::ScalarOps;
6use crate::VectorMut;
7use crate::VectorOps;
8use crate::listview::ListViewVector;
9use vortex_mask::Mask;
10
11/// A scalar value for list view types.
12///
13/// The inner value is a ListViewVector with length 1.
14#[derive(Clone, Debug)]
15pub struct ListViewScalar(ListViewVector);
16
17impl ListViewScalar {
18    /// Create a new ListViewScalar from a length-1 ListViewVector.
19    ///
20    /// # Panics
21    ///
22    /// Panics if the input vector does not have length 1.
23    pub fn new(vector: ListViewVector) -> Self {
24        assert_eq!(vector.len(), 1);
25        Self(vector)
26    }
27
28    /// Returns the inner length-1 vector representing the list view scalar.
29    pub fn value(&self) -> &ListViewVector {
30        &self.0
31    }
32}
33
34impl ScalarOps for ListViewScalar {
35    fn is_valid(&self) -> bool {
36        self.0.validity().value(0)
37    }
38
39    fn mask_validity(&mut self, mask: bool) {
40        if !mask {
41            self.0.mask_validity(&Mask::new_false(1))
42        }
43    }
44
45    fn repeat(&self, _n: usize) -> VectorMut {
46        todo!()
47    }
48}
49
50impl From<ListViewScalar> for Scalar {
51    fn from(val: ListViewScalar) -> Self {
52        Scalar::List(val)
53    }
54}