本文整理汇总了C#中Vertex.GetEdgeToSuccessor方法的典型用法代码示例。如果您正苦于以下问题:C# Vertex.GetEdgeToSuccessor方法的具体用法?C# Vertex.GetEdgeToSuccessor怎么用?C# Vertex.GetEdgeToSuccessor使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Vertex
的用法示例。
在下文中一共展示了Vertex.GetEdgeToSuccessor方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: RemoveDirectedEdge
/// <summary>
/// Removes the directed edge between two vertices. This operation is thread-safe. Its complexity is in O(1). If an edge
/// is removed this operation will fire an OnEdgeRemoved event.
/// </summary>
/// <param name="source"></param>
/// <param name="target"></param>
public void RemoveDirectedEdge(Vertex source, Vertex target)
{
if (_rwl.IsReadLockHeld)
throw new Exception("Synchronization error. You are probably trying to change the graph while iterating through its edges or vertices!");
_rwl.EnterWriteLock();
Edge toRemove = source.GetEdgeToSuccessor(target);
// if such an edge exists
if (toRemove != null && _edges.ContainsKey(toRemove.ID))
{
// an undirected edge becomes directed
if (toRemove.EdgeType == EdgeType.Undirected && toRemove.A == source && toRemove.B == target)
{
toRemove.EdgeType = EdgeType.DirectedBA;
toRemove.A.ChangeEdgeRegistration(toRemove);
toRemove.B.ChangeEdgeRegistration(toRemove);
}
// an undirected edge becomes directed
else if (toRemove.EdgeType == EdgeType.Undirected && toRemove.B == source && toRemove.A == target)
{
toRemove.EdgeType = EdgeType.DirectedAB;
toRemove.A.ChangeEdgeRegistration(toRemove);
toRemove.B.ChangeEdgeRegistration(toRemove);
}
// a directed edge is removed
else if (toRemove.Source == source && toRemove.Target == target)
{
_edges.Remove(toRemove.ID);
toRemove.A.UnregisterEdge(toRemove);
toRemove.B.UnregisterEdge(toRemove);
}
}
_rwl.ExitWriteLock();
if (OnEdgeRemoved != null && toRemove!=null)
OnEdgeRemoved(toRemove);
}
示例2: RemoveEdge
/// <summary>
/// Removes any directed or undirected edge between two vertices. This operation is thread-safe. Its complexity is in O(1). If an edge
/// is removed this operation will fire an OnEdgeRemoved event.
/// </summary>
/// <param name="source"></param>
/// <param name="target"></param>
public void RemoveEdge(Vertex source, Vertex target)
{
if (_rwl.IsReadLockHeld)
throw new Exception("Synchronization error. You are probably trying to change the graph while iterating through its edges or vertices!");
_rwl.EnterWriteLock();
Edge toRemove = source.GetEdgeToSuccessor(target);
// Remove edge if it exists
if (toRemove != null && _edges.ContainsKey(toRemove.ID))
{
_edges.Remove(toRemove.ID);
toRemove.Source.UnregisterEdge(toRemove);
toRemove.Target.UnregisterEdge(toRemove);
}
_rwl.ExitWriteLock();
}