Skip to main content

arrow_data/transform/
boolean.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: See the NOTICE file distributed with this work for additional information regarding copyright ownership
3// SPDX-FileContributor: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements
4
5use super::{_MutableArrayData, Extend, utils::resize_for_bits};
6use crate::ArrayData;
7use crate::bit_mask::set_bits;
8
9pub(super) fn build_extend(array: &ArrayData) -> Extend<'_> {
10    let values = array.buffers()[0].as_slice();
11    Box::new(
12        move |mutable: &mut _MutableArrayData, _, start: usize, len: usize| {
13            let buffer = &mut mutable.buffer1;
14            resize_for_bits(buffer, mutable.len + len);
15            set_bits(
16                buffer.as_slice_mut(),
17                values,
18                mutable.len,
19                array.offset() + start,
20                len,
21            );
22            Ok(())
23        },
24    )
25}
26
27pub(super) fn extend_nulls(
28    mutable: &mut _MutableArrayData,
29    len: usize,
30) -> Result<(), arrow_schema::ArrowError> {
31    let buffer = &mut mutable.buffer1;
32    resize_for_bits(buffer, mutable.len + len);
33    Ok(())
34}