jhorstmann commented on code in PR #8031: URL: https://github.com/apache/arrow-rs/pull/8031#discussion_r2247919728
########## parquet-variant/src/builder.rs: ########## @@ -64,19 +64,55 @@ fn write_offset(buf: &mut Vec<u8>, value: usize, nbytes: u8) { buf.extend_from_slice(&bytes[..nbytes as usize]); } -/// Write little-endian integer to buffer at a specific position -fn write_offset_at_pos(buf: &mut [u8], start_pos: usize, value: usize, nbytes: u8) { - let bytes = value.to_le_bytes(); - buf[start_pos..start_pos + nbytes as usize].copy_from_slice(&bytes[..nbytes as usize]); -} - /// Append `value_size` bytes of given `value` into `dest`. fn append_packed_u32(dest: &mut Vec<u8>, value: u32, value_size: usize) { let n = dest.len() + value_size; dest.extend(value.to_le_bytes()); dest.truncate(n); } +/// An iterator that yields the bytes of a packed u32 iterator. +/// Will yield the first `packed_bytes` bytes of each item in the iterator. +struct PackedU32Iterator<T: Iterator<Item = [u8; 4]>> { + packed_bytes: usize, Review Comment: I haven't looked into the variant implementation or this PR in detail, but does this iterator need a custom implementation or can it be an anonymous `impl Iterator<Item=u8>`? It looks like the implementation is basically `iter.flat_map(u32::to_le_bytes)`. The benefit of that is that if the underlying iterator has a trusted length then the flat-mapped iterator is still trusted, and extending a slice from a `TrustedLen` iterator is much more efficient. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org