@@ -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