/// <inheritdoc /> public virtual bool RemoveVertex(TVertex vertex) { if (!ContainsVertex(vertex)) { return(false); } // Remove out edges IEdgeList <TVertex, TEdge> edges = _vertexEdges[vertex]; if (EdgeRemoved != null) // Lazily notify { foreach (TEdge edge in edges) { OnEdgeRemoved(edge); } } EdgeCount -= edges.Count; edges.Clear(); // Run over edges and remove each edge touching the vertex foreach (var pair in _vertexEdges) { if (pair.Key.Equals(vertex)) { continue; // We've already } // Collect edges to remove foreach (var edge in pair.Value.Clone()) { if (edge.Target.Equals(vertex)) { pair.Value.Remove(edge); OnEdgeRemoved(edge); --EdgeCount; } } } Debug.Assert(EdgeCount >= 0); _vertexEdges.Remove(vertex); OnVertexRemoved(vertex); return(true); }
/// <inheritdoc /> public void ClearInEdges(TVertex vertex) { if (vertex == null) { throw new ArgumentNullException(nameof(vertex)); } IEdgeList <TVertex, TEdge> inEdges = _vertexInEdges[vertex]; foreach (TEdge edge in inEdges) { _vertexOutEdges[edge.Source].Remove(edge); OnEdgeRemoved(edge); } EdgeCount -= inEdges.Count; inEdges.Clear(); }
/// <inheritdoc /> public void ClearOutEdges(TVertex vertex) { if (vertex == null) { throw new ArgumentNullException(nameof(vertex)); } IEdgeList <TVertex, TEdge> edges = _vertexEdges[vertex]; int count = edges.Count; if (EdgeRemoved != null) // Lazily notify { foreach (TEdge edge in edges) { OnEdgeRemoved(edge); } } edges.Clear(); EdgeCount -= count; }