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/map.rs
6940 views
1
use super::*;
2
3
pub(super) fn write_map(
4
array: &MapArray,
5
buffers: &mut Vec<ipc::Buffer>,
6
arrow_data: &mut Vec<u8>,
7
nodes: &mut Vec<ipc::FieldNode>,
8
offset: &mut i64,
9
is_little_endian: bool,
10
compression: Option<Compression>,
11
) {
12
let offsets = array.offsets().buffer();
13
let validity = array.validity();
14
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 == 0 {
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(
47
array
48
.field()
49
.sliced(first as usize, last as usize - first as usize)
50
.as_ref(),
51
buffers,
52
arrow_data,
53
nodes,
54
offset,
55
is_little_endian,
56
compression,
57
);
58
}
59
60