Example #1
0
        public void Clone()
        {
            var list = new EdgeList <int, EquatableEdge <int> >();

            EdgeList <int, EquatableEdge <int> > clonedList = list.Clone();

            CollectionAssert.IsEmpty(clonedList);

            clonedList = (EdgeList <int, EquatableEdge <int> >)((IEdgeList <int, EquatableEdge <int> >)list).Clone();
            CollectionAssert.IsEmpty(clonedList);

            clonedList = (EdgeList <int, EquatableEdge <int> >)((ICloneable)list).Clone();
            CollectionAssert.IsEmpty(clonedList);

            list.AddRange(new[]
            {
                new EquatableEdge <int>(1, 2),
                new EquatableEdge <int>(2, 3)
            });
            clonedList = list.Clone();
            CollectionAssert.AreEqual(list, clonedList);

            clonedList = (EdgeList <int, EquatableEdge <int> >)((IEdgeList <int, EquatableEdge <int> >)list).Clone();
            CollectionAssert.AreEqual(list, clonedList);

            clonedList = (EdgeList <int, EquatableEdge <int> >)((ICloneable)list).Clone();
            CollectionAssert.AreEqual(list, clonedList);
        }
        /// <inheritdoc />
        public int RemoveOutEdgeIf(TVertex vertex, EdgePredicate <TVertex, TEdge> predicate)
        {
            if (vertex == null)
            {
                throw new ArgumentNullException(nameof(vertex));
            }
            if (predicate is null)
            {
                throw new ArgumentNullException(nameof(predicate));
            }

            IEdgeList <TVertex, TEdge> edges = _vertexEdges[vertex];
            var edgesToRemove = new EdgeList <TVertex, TEdge>(edges.Count);

            edgesToRemove.AddRange(edges.Where(edge => predicate(edge)));

            foreach (TEdge edge in edgesToRemove)
            {
                edges.Remove(edge);
                OnEdgeRemoved(edge);
            }

            EdgeCount -= edgesToRemove.Count;

            return(edgesToRemove.Count);
        }
        /// <inheritdoc />
        public int RemoveEdgeIf(EdgePredicate<TVertex, TEdge> predicate)
        {
            if (predicate is null)
                throw new ArgumentNullException(nameof(predicate));

            var edgesToRemove = new EdgeList<TVertex, TEdge>();
            edgesToRemove.AddRange(Edges.Where(edge => predicate(edge)));

            return RemoveEdgesInternal(edgesToRemove);
        }
        /// <inheritdoc />
        public int RemoveInEdgeIf(TVertex vertex, EdgePredicate<TVertex, TEdge> predicate)
        {
            if (predicate is null)
                throw new ArgumentNullException(nameof(predicate));

            if (_vertexInEdges.TryGetValue(vertex, out IEdgeList<TVertex, TEdge> inEdges))
            {
                var edgesToRemove = new EdgeList<TVertex, TEdge>();
                edgesToRemove.AddRange(inEdges.Where(edge => predicate(edge)));
                return RemoveEdgesInternal(edgesToRemove);
            }

            return 0;
        }
Example #5
0
        }                     // private void ComputeLabelsFromDepths()

        /// <summary>
        /// If edges which have undergone dimensional collapse are found,
        /// replace them with a new edge which is a L edge
        /// </summary>
        private void ReplaceCollapsedEdges()
        {
            ArrayList newEdges = new ArrayList(_edgeList);

            foreach (object obj in _edgeList)
            {
                Edge e = (Edge)obj;
                if (e.IsCollapsed())
                {
                    newEdges.Remove(obj);
                    newEdges.Add(e.GetCollapsedEdge());
                }
            }
            _edgeList.Clear(); // remove all elements and then add back in.
            _edgeList.AddRange(newEdges);
        }                      // private void ReplaceCollapsedEdges()
Example #6
0
        /**
         * If collapsed edges are found, replace them with a new edge which is a L edge
         */
        private void ReplaceCollapsedEdges()
        {
            ArrayList newEdges = new ArrayList();

            //for (Iterator it = edgeList.iterator(); it.hasNext(); )
            foreach (object obj in _edgeList)
            {
                Edge e = (Edge)obj;
                if (e.IsCollapsed())
                {
                    _edgeList.Remove(obj);

                    newEdges.Add(e.GetCollapsedEdge());
                }
            }
            _edgeList.AddRange(newEdges);
        }
        /// <inheritdoc />
        public int RemoveEdgeIf(EdgePredicate <TVertex, TEdge> predicate)
        {
            if (predicate is null)
            {
                throw new ArgumentNullException(nameof(predicate));
            }

            var edgesToRemove = new EdgeList <TVertex, TEdge>();

            edgesToRemove.AddRange(Edges.Where(edge => predicate(edge)));

            foreach (TEdge edge in edgesToRemove)
            {
                RemoveEdge(edge);
            }

            return(edgesToRemove.Count);
        }
        /// <inheritdoc />
        public int RemoveInEdgeIf(TVertex vertex, EdgePredicate <TVertex, TEdge> predicate)
        {
            if (predicate is null)
            {
                throw new ArgumentNullException(nameof(predicate));
            }
            if (!_vertexInEdges.TryGetValue(vertex, out IEdgeList <TVertex, TEdge> inEdges))
            {
                return(0);
            }

            var edgesToRemove = new EdgeList <TVertex, TEdge>();

            edgesToRemove.AddRange(inEdges.Where(edge => predicate(edge)));

            foreach (TEdge edge in edgesToRemove)
            {
                RemoveEdge(edge);
            }

            return(edgesToRemove.Count);
        }