polars_core/chunked_array/builder/list/
boolean.rs1use super::*;
2
3pub struct ListBooleanChunkedBuilder {
4 builder: LargeListBooleanBuilder,
5 field: Field,
6 fast_explode: bool,
7}
8
9impl ListBooleanChunkedBuilder {
10 pub fn new(name: PlSmallStr, capacity: usize, values_capacity: usize) -> Self {
11 let values = MutableBooleanArray::with_capacity(values_capacity);
12 let builder = LargeListBooleanBuilder::new_with_capacity(values, capacity);
13 let field = Field::new(name, DataType::List(Box::new(DataType::Boolean)));
14
15 Self {
16 builder,
17 field,
18 fast_explode: true,
19 }
20 }
21
22 #[inline]
23 pub fn append_iter<I: Iterator<Item = Option<bool>> + TrustedLen>(&mut self, iter: I) {
24 let values = self.builder.mut_values();
25
26 if iter.size_hint().0 == 0 {
27 self.fast_explode = false;
28 }
29 unsafe { values.extend_trusted_len_unchecked(iter) };
32 self.builder.try_push_valid().unwrap();
33 }
34
35 #[inline]
36 pub(crate) fn append(&mut self, ca: &BooleanChunked) {
37 if ca.is_empty() {
38 self.fast_explode = false;
39 }
40 let value_builder = self.builder.mut_values();
41 value_builder.extend(ca);
42 self.builder.try_push_valid().unwrap();
43 }
44}
45
46impl ListBuilderTrait for ListBooleanChunkedBuilder {
47 #[inline]
48 fn append_null(&mut self) {
49 self.fast_explode = false;
50 self.builder.push_null();
51 }
52
53 #[inline]
54 fn append_series(&mut self, s: &Series) -> PolarsResult<()> {
55 let ca = s.bool()?;
56 self.append(ca);
57 Ok(())
58 }
59
60 fn field(&self) -> &Field {
61 &self.field
62 }
63
64 fn inner_array(&mut self) -> ArrayRef {
65 self.builder.as_box()
66 }
67
68 fn fast_explode(&self) -> bool {
69 self.fast_explode
70 }
71}