@@ -111,6 +111,8 @@ pub struct EdgeDifferences<'ts> {
111111 edges_right : & ' ts [ Position ] ,
112112 edges_parent : & ' ts [ NodeId ] ,
113113 edges_child : & ' ts [ NodeId ] ,
114+ insertion_order : & ' ts [ EdgeId ] ,
115+ removal_order : & ' ts [ EdgeId ] ,
114116 removals : ( usize , usize ) ,
115117 insertions : ( usize , usize ) ,
116118 left : f64 ,
@@ -122,6 +124,7 @@ pub struct X<'ts, T: EdgeDifferenceIteration> {
122124 edges_right : & ' ts [ Position ] ,
123125 edges_parent : & ' ts [ NodeId ] ,
124126 edges_child : & ' ts [ NodeId ] ,
127+ order : & ' ts [ EdgeId ] ,
125128 range : ( usize , usize ) ,
126129 marker : std:: marker:: PhantomData < T > ,
127130}
@@ -133,10 +136,10 @@ impl<'ts, T: EdgeDifferenceIteration> Iterator for X<'ts, T> {
133136 let index = self . range . 0 ;
134137 self . range . 0 += 1 ;
135138 Some ( Self :: Item :: new (
136- self . edges_left [ index] ,
137- self . edges_right [ index] ,
138- self . edges_parent [ index] ,
139- self . edges_child [ index] ,
139+ self . edges_left [ self . order [ index] . as_usize ( ) ] ,
140+ self . edges_right [ self . order [ index] . as_usize ( ) ] ,
141+ self . edges_parent [ self . order [ index] . as_usize ( ) ] ,
142+ self . edges_child [ self . order [ index] . as_usize ( ) ] ,
140143 ) )
141144 } else {
142145 None
@@ -151,6 +154,7 @@ impl<'ts> EdgeDifferences<'ts> {
151154 edges_right : self . edges_right ,
152155 edges_parent : self . edges_parent ,
153156 edges_child : self . edges_child ,
157+ order : self . removal_order ,
154158 range : self . removals ,
155159 marker : std:: marker:: PhantomData :: < Removal > { } ,
156160 }
@@ -162,6 +166,7 @@ impl<'ts> EdgeDifferences<'ts> {
162166 edges_right : self . edges_right ,
163167 edges_parent : self . edges_parent ,
164168 edges_child : self . edges_child ,
169+ order : self . insertion_order ,
165170 range : self . insertions ,
166171 marker : std:: marker:: PhantomData :: < Insertion > { } ,
167172 }
@@ -193,10 +198,17 @@ impl<'ts> Iterator for EdgeDifferencesIterator<'ts> {
193198 if self . insertion_index < self . insertion_order . len ( ) && self . left < self . sequence_length {
194199 let removals_start = self . removal_index ;
195200 while self . removal_index < self . removal_order . len ( )
196- && self . edges_right [ self . removal_index ] == self . left
201+ && self . edges_right [ self . removal_order [ self . removal_index ] . as_usize ( ) ] == self . left
197202 {
198203 self . removal_index += 1 ;
199204 }
205+ let insertions_start = self . insertion_index ;
206+ while self . insertion_index < self . insertion_order . len ( )
207+ && self . edges_left [ self . insertion_order [ self . insertion_index ] . as_usize ( ) ]
208+ == self . left
209+ {
210+ self . insertion_index += 1 ;
211+ }
200212 let right = update_right (
201213 self . sequence_length ,
202214 self . insertion_index ,
@@ -209,17 +221,13 @@ impl<'ts> Iterator for EdgeDifferencesIterator<'ts> {
209221 self . edges_right ,
210222 self . removal_order ,
211223 ) ;
212- let insertions_start = self . insertion_index ;
213- while self . insertion_index < self . insertion_order . len ( )
214- && self . edges_left [ self . insertion_index ] == self . left
215- {
216- self . insertion_index += 1 ;
217- }
218224 let diffs = EdgeDifferences {
219225 edges_left : self . edges_left ,
220226 edges_right : self . edges_right ,
221227 edges_parent : self . edges_parent ,
222228 edges_child : self . edges_child ,
229+ insertion_order : self . insertion_order ,
230+ removal_order : self . removal_order ,
223231 removals : ( removals_start, self . removal_index ) ,
224232 insertions : ( insertions_start, self . insertion_index ) ,
225233 left : self . left ,
0 commit comments