arrow2/array/growable/
utils.rs1use crate::{array::Array, bitmap::MutableBitmap, offset::Offset};
2
3pub(super) type ExtendNullBits<'a> = Box<dyn Fn(&mut MutableBitmap, usize, usize) + 'a>;
6
7pub(super) fn build_extend_null_bits(array: &dyn Array, use_validity: bool) -> ExtendNullBits {
8 if let Some(bitmap) = array.validity() {
9 Box::new(move |validity, start, len| {
10 debug_assert!(start + len <= bitmap.len());
11 let (slice, offset, _) = bitmap.as_slice();
12 unsafe {
14 validity.extend_from_slice_unchecked(slice, start + offset, len);
15 }
16 })
17 } else if use_validity {
18 Box::new(|validity, _, len| {
19 validity.extend_constant(len, true);
20 })
21 } else {
22 Box::new(|_, _, _| {})
23 }
24}
25
26#[inline]
27pub(super) fn extend_offset_values<O: Offset>(
28 buffer: &mut Vec<u8>,
29 offsets: &[O],
30 values: &[u8],
31 start: usize,
32 len: usize,
33) {
34 let start_values = offsets[start].to_usize();
35 let end_values = offsets[start + len].to_usize();
36 let new_values = &values[start_values..end_values];
37 buffer.extend_from_slice(new_values);
38}