/// <summary> /// Adds an edge set (increasing reference counts), /// and if resulting graph has a cycle, invoke the edge set's cycle announcer. /// </summary> public void AddEdgeSetAndFindCycle(EdgeSet edgeSet) { foreach (var edge in edgeSet.Edges) { AddEdge(edge); } Contract.Assume(m_markers.Count == 0); foreach (var valuePromiseWithOutgoingEdges in m_graph.Keys) { if (!IsCycleFreeFrom(valuePromiseWithOutgoingEdges)) { edgeSet.CycleAnnouncer(); break; } } m_markers.Clear(); }