diff --git a/encodings/alp/src/alp_rd/array.rs b/encodings/alp/src/alp_rd/array.rs index 0ccd4cc8e2..c548ad4fb2 100644 --- a/encodings/alp/src/alp_rd/array.rs +++ b/encodings/alp/src/alp_rd/array.rs @@ -204,7 +204,7 @@ impl IntoCanonical for ALPRDArray { left_parts.into_buffer::(), left_parts_dict, self.metadata().right_bit_width, - right_parts.into_buffer::(), + right_parts.into_buffer_mut::(), self.left_parts_patches(), )?, self.logical_validity().into_validity(), @@ -215,7 +215,7 @@ impl IntoCanonical for ALPRDArray { left_parts.into_buffer::(), left_parts_dict, self.metadata().right_bit_width, - right_parts.into_buffer::(), + right_parts.into_buffer_mut::(), self.left_parts_patches(), )?, self.logical_validity().into_validity(), diff --git a/encodings/alp/src/alp_rd/mod.rs b/encodings/alp/src/alp_rd/mod.rs index 17c8d1436f..e03276dc35 100644 --- a/encodings/alp/src/alp_rd/mod.rs +++ b/encodings/alp/src/alp_rd/mod.rs @@ -260,7 +260,7 @@ pub fn alp_rd_decode( left_parts: Buffer, left_parts_dict: &[u16], right_bit_width: u8, - right_parts: Buffer, + right_parts: BufferMut, left_parts_patches: Option, ) -> VortexResult> { if left_parts.len() != right_parts.len() { @@ -288,13 +288,15 @@ pub fn alp_rd_decode( } // Shift the left-parts and add in the right-parts. - Ok( - BufferMut::::from_iter(values.iter().zip(right_parts.iter()).map(|(left, right)| { - let left = ::from_u16(*left); - T::from_bits((left << (right_bit_width as usize)) | *right) - })) - .freeze(), - ) + let mut index = 0; + Ok(right_parts + .map_each(|right| { + let left = values[index]; + index += 1; + let left = ::from_u16(left); + T::from_bits((left << (right_bit_width as usize)) | right) + }) + .freeze()) } /// Find the best "cut point" for a set of floating point values such that we can