vortex_fastlanes/bitpacking/vtable/
canonical.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use vortex_array::Canonical;
5use vortex_array::builders::ArrayBuilder;
6use vortex_array::vtable::CanonicalVTable;
7use vortex_dtype::match_each_integer_ptype;
8use vortex_error::VortexExpect;
9
10use crate::BitPackedArray;
11use crate::BitPackedVTable;
12use crate::bitpack_decompress::unpack_array;
13use crate::bitpack_decompress::unpack_into_primitive_builder;
14
15impl CanonicalVTable<BitPackedVTable> for BitPackedVTable {
16    fn canonicalize(array: &BitPackedArray) -> Canonical {
17        Canonical::Primitive(unpack_array(array))
18    }
19
20    fn append_to_builder(array: &BitPackedArray, builder: &mut dyn ArrayBuilder) {
21        match_each_integer_ptype!(array.ptype(), |T| {
22            unpack_into_primitive_builder::<T>(
23                array,
24                builder
25                    .as_any_mut()
26                    .downcast_mut()
27                    .vortex_expect("bit packed array must canonicalize into a primitive array"),
28            )
29        })
30    }
31}