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));
        }
Пример #2
0
        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));
        }