polars_arrow/array/growable/
null.rs

1use std::sync::Arc;
2
3use super::Growable;
4use crate::array::{Array, NullArray};
5use crate::datatypes::ArrowDataType;
6
7/// Concrete [`Growable`] for the [`NullArray`].
8pub struct GrowableNull {
9    dtype: ArrowDataType,
10    length: usize,
11}
12
13impl Default for GrowableNull {
14    fn default() -> Self {
15        Self::new(ArrowDataType::Null)
16    }
17}
18
19impl GrowableNull {
20    /// Creates a new [`GrowableNull`].
21    pub fn new(dtype: ArrowDataType) -> Self {
22        Self { dtype, length: 0 }
23    }
24}
25
26impl Growable<'_> for GrowableNull {
27    unsafe fn extend(&mut self, _: usize, _: usize, len: usize) {
28        self.length += len;
29    }
30
31    fn extend_validity(&mut self, additional: usize) {
32        self.length += additional;
33    }
34
35    #[inline]
36    fn len(&self) -> usize {
37        self.length
38    }
39
40    fn as_arc(&mut self) -> Arc<dyn Array> {
41        Arc::new(NullArray::new(self.dtype.clone(), self.length))
42    }
43
44    fn as_box(&mut self) -> Box<dyn Array> {
45        Box::new(NullArray::new(self.dtype.clone(), self.length))
46    }
47}
48
49impl From<GrowableNull> for NullArray {
50    fn from(val: GrowableNull) -> Self {
51        NullArray::new(val.dtype, val.length)
52    }
53}