Skip to content

Commit c54a417

Browse files
committed
[skera] add copy_data option for duplicate_vertex()
1 parent 734d3e0 commit c54a417

1 file changed

Lines changed: 16 additions & 5 deletions

File tree

skera/src/graph.rs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -982,7 +982,7 @@ impl Graph {
982982
return Ok(());
983983
}
984984

985-
let clone_idx = self.duplicate_vertex(start_idx)?;
985+
let clone_idx = self.duplicate_vertex(start_idx, false)?;
986986
index_map.insert(start_idx, clone_idx);
987987

988988
let start_v = &self.vertices[start_idx];
@@ -999,7 +999,11 @@ impl Graph {
999999
}
10001000

10011001
/// Creates a copy of the specified vertex and returns the new vertex idx.
1002-
fn duplicate_vertex(&mut self, obj_idx: ObjIdx) -> Result<ObjIdx, RepackError> {
1002+
fn duplicate_vertex(
1003+
&mut self,
1004+
obj_idx: ObjIdx,
1005+
copy_data: bool,
1006+
) -> Result<ObjIdx, RepackError> {
10031007
let clone_idx = self.vertices.len();
10041008
if clone_idx >= MAX_VERTICES {
10051009
return Err(RepackError::ErrorMaxOperationsExceeded);
@@ -1012,7 +1016,14 @@ impl Graph {
10121016
let v = self
10131017
.vertex(obj_idx)
10141018
.ok_or(RepackError::GraphErrorInvalidObjIndex)?;
1015-
let new_v = Vertex::duplicate(v);
1019+
1020+
let table_size = v.table_size();
1021+
let mut new_v = Vertex::duplicate(v);
1022+
if copy_data && table_size > 0 {
1023+
new_v.head = self.data.len();
1024+
self.data.extend_from_within(v.head..v.tail);
1025+
new_v.tail = self.data.len();
1026+
}
10161027
let vertices = &mut self.vertices;
10171028

10181029
for l in new_v.real_links.values() {
@@ -1178,7 +1189,7 @@ impl Graph {
11781189
return Ok(None);
11791190
}
11801191

1181-
let clone_idx = self.duplicate_vertex(child_idx)?;
1192+
let clone_idx = self.duplicate_vertex(child_idx, false)?;
11821193
let mut old_to_new_idx_parents = Vec::new();
11831194
for parent_idx in parents.iter() {
11841195
let parent_idx = parent_idx as usize;
@@ -1211,7 +1222,7 @@ impl Graph {
12111222
child_idx: ObjIdx,
12121223
pos: u32,
12131224
) -> Result<Option<ObjIdx>, RepackError> {
1214-
let clone_idx = self.duplicate_vertex(child_idx)?;
1225+
let clone_idx = self.duplicate_vertex(child_idx, true)?;
12151226
self.mut_vertex(child_idx)
12161227
.ok_or(RepackError::GraphErrorInvalidObjIndex)?
12171228
.remove_parent(parent_idx, false);

0 commit comments

Comments
 (0)