Skip to main content

vortex_fsst/
ops.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use vortex_array::ArrayView;
5use vortex_array::ExecutionCtx;
6use vortex_array::arrays::varbin::varbin_scalar;
7use vortex_array::scalar::Scalar;
8use vortex_array::vtable::OperationsVTable;
9use vortex_buffer::ByteBuffer;
10use vortex_error::VortexExpect;
11use vortex_error::VortexResult;
12
13use crate::FSST;
14use crate::FSSTArrayExt;
15
16impl OperationsVTable<FSST> for FSST {
17    type ProbeState = ();
18
19    fn scalar_at(
20        array: ArrayView<'_, FSST>,
21        index: usize,
22        ctx: &mut ExecutionCtx,
23    ) -> VortexResult<Scalar> {
24        let compressed = array.codes().execute_scalar(index, ctx)?;
25        let binary_datum = compressed.as_binary().value().vortex_expect("non-null");
26
27        let decoded_buffer = ByteBuffer::from(array.decompressor().decompress(binary_datum));
28        Ok(varbin_scalar(decoded_buffer, array.dtype()))
29    }
30}