SortEdgesByVertex1
(
IEnumerable<IEdge> oFilteredEdges,
out LinkedList<IEdge> oSortedEdges,
out Dictionary< IVertex, LinkedListNode<IEdge> > oFirstNodes
)
{
Debug.Assert(oFilteredEdges != null);
oSortedEdges = new LinkedList<IEdge>();
oFirstNodes = new Dictionary< IVertex, LinkedListNode<IEdge> >();
foreach (IEdge oEdge in oFilteredEdges)
{
IVertex oVertex1 = oEdge.Vertex1;
LinkedListNode<IEdge> oFirstNodeForVertex;
if ( oFirstNodes.TryGetValue(oVertex1, out oFirstNodeForVertex) )
{
oSortedEdges.AddAfter(oFirstNodeForVertex, oEdge);
}
else
{
oSortedEdges.AddFirst( (IEdge)null );
oFirstNodeForVertex = oSortedEdges.AddFirst(oEdge);
oFirstNodes.Add(oVertex1, oFirstNodeForVertex);
}
}
#if false // For testing.
{
foreach (IVertex oVertex in oFirstNodes.Keys)
{
Debug.WriteLine("First vertex: " + oVertex.Name);
LinkedListNode<IEdge> oFirstNode = oFirstNodes[oVertex];
while (oFirstNode.Value != null)
{
Debug.WriteLine(" Edge: "
+ oFirstNode.Value.Vertex1.Name + ", "
+ oFirstNode.Value.Vertex2.Name);
oFirstNode = oFirstNode.Next;
}
}
}
#endif
}