public RemoveVertexResult <TVertex, TEdge> RemoveVertex(TVertex vertex) { bool vertexWasRemoved; TEdge[] edgesOfRemovedVertex; lock (SyncRoot) { edgesOfRemovedVertex = Graph.GetAllEdges(vertex).ToArray(); vertexWasRemoved = Graph.RemoveVertex(vertex); } if (!vertexWasRemoved) { return(RemoveVertexResult <TVertex, TEdge> .Empty); } foreach (var edge in edgesOfRemovedVertex) { EdgeRemoved?.Invoke(edge); } VertexRemoved?.Invoke(vertex); return(new RemoveVertexResult <TVertex, TEdge>(vertex, edgesOfRemovedVertex)); }
public IImmutableBidirectionalGraph <TVertex, TVertexId, TEdge, TEdgeId> RemoveVertex(TVertexId vertexId) { EnsureVertexId(vertexId); var updatedVertices = _vertices.Remove(vertexId); var updatedEdges = _edges.RemoveRange(_graph.GetAllEdges(vertexId).Select(i => i.Id)); var updatedGraph = CloneAndMutateGraph(i => i.RemoveVertex(vertexId)); return(CreateInstance(updatedVertices, updatedEdges, updatedGraph)); }