use vortex_buffer::Buffer;
use vortex_buffer::BufferMut;
use crate::dtype::IntegerPType;
#[inline(always)]
pub(crate) fn take_values_scalar<T: Copy, I: IntegerPType>(
values: &[T],
indices: &[I],
) -> Buffer<T> {
let mut result = BufferMut::with_capacity(indices.len());
let result_ptr = result.spare_capacity_mut().as_mut_ptr().cast::<T>();
for (output_index, index) in indices.iter().enumerate() {
unsafe { result_ptr.add(output_index).write(values[index.as_()]) };
}
unsafe { result.set_len(indices.len()) };
result.freeze()
}