Path: blob/main/crates/polars-parquet/src/arrow/read/deserialize/primitive/plain/required.rs
8507 views
use arrow::types::AlignedBytes;12use super::ArrayChunks;3use crate::parquet::error::ParquetResult;45#[inline(never)]6pub fn decode<B: AlignedBytes>(7values: ArrayChunks<'_, B>,8target: &mut Vec<B>,9) -> ParquetResult<()> {10if values.is_empty() {11return Ok(());12}1314target.reserve(values.len());1516// SAFETY: Vec guarantees if the `capacity != 0` the pointer to valid since we just reserve17// that pointer.18let dst = unsafe { target.as_mut_ptr().add(target.len()) };19let src = values.as_ptr();2021// SAFETY:22// - `src` is valid for read of values.len() elements.23// - `dst` is valid for writes of values.len() elements, it was just reserved.24// - B::Unaligned is always aligned, since it has an alignment of 125// - The ranges for src and dst do not overlap26unsafe {27std::ptr::copy_nonoverlapping::<B::Unaligned>(src.cast(), dst.cast(), values.len());28target.set_len(target.len() + values.len());29};3031Ok(())32}333435