diff --git a/crates/loro-core/src/dag/iter.rs b/crates/loro-core/src/dag/iter.rs index 6b9c21b1..50c91fd3 100644 --- a/crates/loro-core/src/dag/iter.rs +++ b/crates/loro-core/src/dag/iter.rs @@ -222,7 +222,6 @@ impl<'a, T: DagNode, D: Dag> DagCausalIter<'a, D> { for id in target.iter() { if id.1.content_len() > 0 { let id = id.id_start(); - // Nodes that can be directly applied are preferred to be stacked let node = dag.get(id).unwrap(); let diff = id.counter - node.id_start().counter; heap.push(IdHeapItem { @@ -242,8 +241,8 @@ impl<'a, T: DagNode, D: Dag> DagCausalIter<'a, D> { let node = dag.get(id).unwrap(); let deps = node.deps(); if id.counter == target.get(&client).unwrap().min() { - // right after the `from` node can be appended directly ❌ - // TODO maybe target start nodes has deps relation + // right after the `from` node can be appended causally + // target start nodes maybe have deps relation so we use Lamport. stack.push(id); } else { in_degrees.insert(id, deps.len()); @@ -260,14 +259,6 @@ impl<'a, T: DagNode, D: Dag> DagCausalIter<'a, D> { } } - // in_degrees.retain(|id, i| { - // if i.is_zero() { - // stack.push(*id); - // return false; - // } - // true - // }); - Self { dag, frontier: from, @@ -354,6 +345,7 @@ impl<'a, T: DagNode + 'a, D: Dag> Iterator for DagCausalIter<'a, D> { } } } + // Nodes that have been traversed are removed from the graph to avoid being covered by other node ranges again keys.into_iter().for_each(|k| { self.succ.remove(&k); });