Skip to content

Commit 2d80d15

Browse files
committed
tests pass
1 parent a1bb8c4 commit 2d80d15

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

src/edge_differences.rs

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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,

tests/book_trees.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,10 +170,10 @@ fn initialize_from_table_collection() {
170170
// ANCHOR: iterate_edge_differences
171171
for diffs in treeseq.edge_differences_iter() {
172172
for edge_removal in diffs.removals() {
173-
println!("{}", edge_removal);
173+
println!("edge removal: {}", edge_removal);
174174
}
175175
for edge_insertion in diffs.insertions() {
176-
println!("{}", edge_insertion);
176+
println!("edge insertion: {}", edge_insertion);
177177
}
178178
}
179179
// ANCHOR_END: iterate_edge_differences

0 commit comments

Comments
 (0)