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