Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-parquet/src/arrow/read/deserialize/binary/plain.rs
8475 views
1
use super::BinaryIter;
2
use crate::parquet::error::ParquetResult;
3
4
pub fn decode_plain(
5
values: &[u8],
6
max_num_values: usize,
7
target: &mut Vec<u8>,
8
offsets: &mut Vec<i64>,
9
) -> ParquetResult<()> {
10
assert!(target.is_empty());
11
assert!(offsets.is_empty());
12
13
offsets.reserve(max_num_values + 1);
14
offsets.push(0);
15
16
// First, get the summed length so we can reserve once.
17
let mut total_buffer_size = 0;
18
let mut offset = 0;
19
offsets.extend(BinaryIter::new(values, max_num_values).map(|value| {
20
total_buffer_size += value.len();
21
offset += value.len() as i64;
22
offset
23
}));
24
25
// Second, fill in all the data.
26
target.reserve(total_buffer_size);
27
for value in BinaryIter::new(values, max_num_values) {
28
target.extend_from_slice(value);
29
}
30
31
Ok(())
32
}
33
34