private IEdgeList <TVertex, TEdge> AddAndReturnEdges(TVertex vertex) { if (!_adjacentEdges.TryGetValue(vertex, out IEdgeList <TVertex, TEdge> edges)) { _adjacentEdges[vertex] = edges = EdgeCapacity < 0 ? new EdgeList <TVertex, TEdge>() : new EdgeList <TVertex, TEdge>(EdgeCapacity); } return(edges); }
/// <inheritdoc /> public IEnumerable <TEdge> OutEdges(TVertex vertex) { if (vertex == null) { throw new ArgumentNullException(nameof(vertex)); } if (!_verticesEdgesCache.TryGetValue(vertex, out IEdgeList <TVertex, TEdge> edges)) { edges = new EdgeList <TVertex, TEdge>(); foreach (ITransitionFactory <TVertex, TEdge> transitionFactory in TransitionFactories) { if (!transitionFactory.IsValid(vertex)) { continue; } foreach (TEdge edge in transitionFactory.Apply(vertex)) { if (SuccessorVertexPredicate(edge.Target) && SuccessorEdgePredicate(edge)) { edges.Add(edge); } } } _verticesEdgesCache[vertex] = edges; } return(edges); }
public void ClearAdjacentEdges(TVertex v) { var edges = this._adjacentEdges[v].Clone(); EdgeCount -= edges.Count; foreach (var edge in edges) { IEdgeList <TVertex, TEdge> aEdges; if (_adjacentEdges.TryGetValue(edge.Target, out aEdges)) { aEdges.Remove(edge); } if (_adjacentEdges.TryGetValue(edge.Source, out aEdges)) { aEdges.Remove(edge); } } }