polars_arrow/array/growable/
null.rs1use std::sync::Arc;
2
3use super::Growable;
4use crate::array::{Array, NullArray};
5use crate::datatypes::ArrowDataType;
6
7pub 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 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}