Skip to main content

vortex_runend/compute/
fill_null.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use vortex_array::ArrayRef;
5use vortex_array::ArrayView;
6use vortex_array::IntoArray;
7use vortex_array::builtins::ArrayBuiltins;
8use vortex_array::scalar::Scalar;
9use vortex_array::scalar_fn::fns::fill_null::FillNullReduce;
10use vortex_error::VortexResult;
11
12use crate::RunEnd;
13use crate::array::RunEndArrayExt;
14use crate::array::RunEndArraySlotsExt;
15
16impl FillNullReduce for RunEnd {
17    fn fill_null(
18        array: ArrayView<'_, Self>,
19        fill_value: &Scalar,
20    ) -> VortexResult<Option<ArrayRef>> {
21        let new_values = array.values().fill_null(fill_value.clone())?;
22        // SAFETY: modifying values only, does not affect ends
23        Ok(Some(
24            unsafe {
25                RunEnd::new_unchecked(
26                    array.ends().clone(),
27                    new_values,
28                    array.offset(),
29                    array.len(),
30                )
31            }
32            .into_array(),
33        ))
34    }
35}