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; }
} // 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()
/** * 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); }