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