Path: blob/main/crates/polars-arrow/src/io/ipc/write/serialize/binary.rs
6940 views
use super::*;12#[allow(clippy::too_many_arguments)]3fn write_generic_binary<O: Offset>(4validity: Option<&Bitmap>,5offsets: &OffsetsBuffer<O>,6values: &[u8],7buffers: &mut Vec<ipc::Buffer>,8arrow_data: &mut Vec<u8>,9offset: &mut i64,10is_little_endian: bool,11compression: Option<Compression>,12) {13let offsets = offsets.buffer();14write_bitmap(15validity,16offsets.len() - 1,17buffers,18arrow_data,19offset,20compression,21);2223let first = *offsets.first().unwrap();24let last = *offsets.last().unwrap();25if first == O::default() {26write_buffer(27offsets,28buffers,29arrow_data,30offset,31is_little_endian,32compression,33);34} else {35write_buffer_from_iter(36offsets.iter().map(|x| *x - first),37buffers,38arrow_data,39offset,40is_little_endian,41compression,42);43}4445write_bytes(46&values[first.to_usize()..last.to_usize()],47buffers,48arrow_data,49offset,50compression,51);52}5354pub(super) fn write_binary<O: Offset>(55array: &BinaryArray<O>,56buffers: &mut Vec<ipc::Buffer>,57arrow_data: &mut Vec<u8>,58offset: &mut i64,59is_little_endian: bool,60compression: Option<Compression>,61) {62write_generic_binary(63array.validity(),64array.offsets(),65array.values(),66buffers,67arrow_data,68offset,69is_little_endian,70compression,71);72}7374pub(super) fn write_utf8<O: Offset>(75array: &Utf8Array<O>,76buffers: &mut Vec<ipc::Buffer>,77arrow_data: &mut Vec<u8>,78offset: &mut i64,79is_little_endian: bool,80compression: Option<Compression>,81) {82write_generic_binary(83array.validity(),84array.offsets(),85array.values(),86buffers,87arrow_data,88offset,89is_little_endian,90compression,91);92}939495