示例#1
0
            /// <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();
            }