Skip to content

Commit 7420995

Browse files
committed
Remove some other clones
1 parent 7c33ce7 commit 7420995

1 file changed

Lines changed: 26 additions & 8 deletions

File tree

src/rs/mapfile.rs

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,13 @@ impl MapFile {
239239
prev_line = line;
240240
}
241241

242-
for (i, segment) in temp_segment_list.iter_mut().enumerate() {
242+
self.segments_list = Self::post_process_segments_gnu(temp_segment_list);
243+
}
244+
245+
fn post_process_segments_gnu(temp_segment_list: Vec<segment::Segment>) -> Vec<segment::Segment> {
246+
let mut segments_list = Vec::with_capacity(temp_segment_list.len());
247+
248+
for (i, segment) in temp_segment_list.into_iter().enumerate() {
243249
if i == 0 && segment.is_placeholder() {
244250
// skip the dummy segment if it has no size, files or symbols
245251
continue;
@@ -248,7 +254,7 @@ impl MapFile {
248254
let mut new_segment = segment.clone_no_filelist();
249255

250256
let mut vrom_offset = segment.vrom;
251-
for file in segment.files_list.iter_mut() {
257+
for mut file in segment.files_list.into_iter() {
252258
let mut acummulated_size = 0;
253259
let symbols_count = file.symbols.len();
254260
let is_noload_section = file.is_noload_section();
@@ -308,11 +314,14 @@ impl MapFile {
308314
vrom_offset += file.size;
309315
}
310316

311-
new_segment.files_list.push(file.clone());
317+
new_segment.files_list.push(file);
312318
}
313319

314-
self.segments_list.push(new_segment);
320+
segments_list.push(new_segment);
315321
}
322+
323+
segments_list.shrink_to_fit();
324+
segments_list
316325
}
317326

318327
/**
@@ -414,15 +423,21 @@ impl MapFile {
414423
}
415424
}
416425

417-
for (i, segment) in temp_segment_list.iter_mut().enumerate() {
426+
self.segments_list = Self::post_process_segments_lld(temp_segment_list);
427+
}
428+
429+
fn post_process_segments_lld(temp_segment_list: Vec<segment::Segment>) -> Vec<segment::Segment> {
430+
let mut segments_list = Vec::with_capacity(temp_segment_list.len());
431+
432+
for (i, segment) in temp_segment_list.into_iter().enumerate() {
418433
if i == 0 && segment.is_placeholder() {
419434
// skip the dummy segment if it has no size, files or symbols
420435
continue;
421436
}
422437

423438
let mut new_segment = segment.clone_no_filelist();
424439

425-
for file in segment.files_list.iter_mut() {
440+
for mut file in segment.files_list.into_iter() {
426441
if file.is_placeholder() {
427442
// drop placeholders
428443
continue;
@@ -455,11 +470,14 @@ impl MapFile {
455470
}
456471
}
457472

458-
new_segment.files_list.push(file.clone());
473+
new_segment.files_list.push(file);
459474
}
460475

461-
self.segments_list.push(new_segment);
476+
segments_list.push(new_segment);
462477
}
478+
479+
segments_list.shrink_to_fit();
480+
segments_list
463481
}
464482

465483
pub fn filter_by_section_type(&self, section_type: &str) -> Self {

0 commit comments

Comments
 (0)