public void RevertFromTwin() { var twinArc = ArcHelper.FindArc(((ABVertex)End).Twin, ((ABVertex)Start).Twin, ((ABVertex)Start).Twin.InboundArcs); twinArc.Revert(); /*if (((ABVertex)Start).Type == VertexType.A) * { * var twinArc = ArcHelper.FindArc(((ABVertex)End).Twin, ((ABVertex)Start).Twin, ((ABVertex)Start).OutboundArcs); * twinArc.Revert(); * } * else * { * var twinArc = ArcHelper.FindArc(((ABVertex)End).Twin, ((ABVertex)Start).Twin, ((ABVertex)Start).InboundArcs); * twinArc.Revert(); * }*/ var tmp = Start; Start = End; End = tmp; IsInMatching = !IsInMatching; Log.Info("Reverted arc into " + this); Start.ArcReverted(this); End.ArcReverted(this); }
private LinkedList <Arc> ReconstructQ(IStackableVertex uA, IStackableVertex wA, LinkedList <Arc> path) { var st = wA; var p1St = st.Value.P.Start; var p2St = st.Value.P.End; var pathQ = Reconstruct(p1St, st, path); while (p2St != uA) { st = st.Value.P.End; var block = Reconstruct(st.Value.P.Start, st, path); pathQ.AppendRange(block); } if (uA.ArcFromAncestor == null) { var arc = ArcHelper.FindArc(st.Value.P.Start.Value, uA.Value, uA.Value.InboundArcs); pathQ.AddLast(arc); } else { pathQ.AddLast(uA.ArcFromAncestor); } return(path); }