public bool Delete(GraphNode node)
{
//Delete from NodeTable
Hashtable table = AddrSet.AddrGraph.NodeTable;
TableNode tnodelist = table[node.Name] as TableNode;
//find the relevant node in NodeList
TableNode tnode = tnodelist;
while (tnode.Next != null)
{
if (tnode.GNode.ID == node.ID)
{
break;
}
tnode = tnode.Next;
}
if (tnode.GNode.ID != node.ID)
{
//Not found in NodeList
return false;
}
if (tnode.Prev == null) // this node is head
{
tnode.Next.Prev = null;
table.Remove(node.Name);
table.Add(node.Name,tnode.Next);
}
else if(tnode.Next == null) //this node is tail
{
tnode.Prev.Next = null;
}
else
{
tnode.Prev.Next = tnode.Next;
tnode.Next.Prev = tnode.Prev;
}
//Delete from Graph
List<GraphNode> gnodelist = RetrievalGraph(delegate(GraphNode p)
{
if (p.NextNodeList.Contains(node))
{
return true;
}
else
{
return false;
}
});
foreach (GraphNode resultnode in gnodelist)
{
resultnode.NextNodeList.Remove(node);
AddrGraph.NodeCount--;
}
return true;
}