1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
use std::sync::Arc;
use crate::array::{Array, NullArray};
use super::Growable;
pub struct GrowableNull {
length: usize,
}
impl Default for GrowableNull {
fn default() -> Self {
Self { length: 0 }
}
}
impl GrowableNull {
pub fn new() -> Self {
Self::default()
}
}
impl<'a> Growable<'a> for GrowableNull {
fn extend(&mut self, _: usize, _: usize, len: usize) {
self.length += len;
}
fn extend_validity(&mut self, additional: usize) {
self.length += additional;
}
fn as_arc(&mut self) -> Arc<dyn Array> {
Arc::new(NullArray::from_data(self.length))
}
fn as_box(&mut self) -> Box<dyn Array> {
Box::new(NullArray::from_data(self.length))
}
}
impl From<GrowableNull> for NullArray {
fn from(val: GrowableNull) -> Self {
NullArray::from_data(val.length)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_null() {
let mut mutable = GrowableNull::new();
mutable.extend(0, 1, 2);
mutable.extend(1, 0, 1);
let result: NullArray = mutable.into();
let expected = NullArray::from_data(3);
assert_eq!(result, expected);
}
}