MCPcopy Create free account
hub / github.com/apache/arrow-rs / pad_nulls

Method pad_nulls

parquet/src/arrow/buffer/offset_buffer.rs:154–200  ·  view source on GitHub ↗
(
        &mut self,
        read_offset: usize,
        values_read: usize,
        levels_read: usize,
        valid_mask: &[u8],
    )

Source from the content-addressed store, hash-verified

152 }
153
154 fn pad_nulls(
155 &mut self,
156 read_offset: usize,
157 values_read: usize,
158 levels_read: usize,
159 valid_mask: &[u8],
160 ) {
161 assert_eq!(self.offsets.len(), read_offset + values_read + 1);
162 self.offsets
163 .resize(read_offset + levels_read + 1, I::default());
164
165 let offsets = &mut self.offsets;
166
167 let mut last_pos = read_offset + levels_read + 1;
168 let mut last_start_offset = I::from_usize(self.values.len()).unwrap();
169
170 let values_range = read_offset..read_offset + values_read;
171 for (value_pos, level_pos) in values_range
172 .clone()
173 .rev()
174 .zip(iter_set_bits_rev(valid_mask))
175 {
176 assert!(level_pos >= value_pos);
177 assert!(level_pos < last_pos);
178
179 let end_offset = offsets[value_pos + 1];
180 let start_offset = offsets[value_pos];
181
182 // Fill in any nulls
183 for x in &mut offsets[level_pos + 1..last_pos] {
184 *x = end_offset;
185 }
186
187 if level_pos == value_pos {
188 return;
189 }
190
191 offsets[level_pos] = start_offset;
192 last_pos = level_pos;
193 last_start_offset = start_offset;
194 }
195
196 // Pad leading nulls up to `last_offset`
197 for x in &mut offsets[values_range.start + 1..last_pos] {
198 *x = last_start_offset
199 }
200 }
201}
202
203#[cfg(test)]

Callers 2

test_pad_nulls_emptyFunction · 0.45

Calls 6

defaultFunction · 0.85
iter_set_bits_revFunction · 0.85
zipMethod · 0.80
resizeMethod · 0.45
lenMethod · 0.45
cloneMethod · 0.45

Tested by 2

test_pad_nulls_emptyFunction · 0.36