using System;
namespace Study
{
/// <summary>
/// CChain 的摘要说明。
/// </summary>
public class CChain
{
public class CChainNode
{
public object Data;
public CChainNode NextChainNode;
public CChainNode PreviousChainNode;
public object Tag;
public string Key;
public CChainNode()
{
this.Data=null;
this.Tag=null;
this.Key=null;
this.NextChainNode=this.PreviousChainNode=null;
}
public CChainNode(object vData,object vTag,string vKey)
{
this.Data=vData;
this.Tag=vTag;
this.Key=vKey;
this.NextChainNode=this.PreviousChainNode=null;
}
}
public class CChainIterator
{
private CChainNode pCurrentChainNode,pFirstChainNode,pLastChainNode;
private bool pbFirst,pbLast;
public CChainIterator(CChainNode vFirstChainNode,CChainNode vLastChainNode)
{
this.pCurrentChainNode=this.pFirstChainNode=this.pLastChainNode=null;
if(vFirstChainNode!=null)
{
pCurrentChainNode=pFirstChainNode=vFirstChainNode;
pbFirst=false;
}
if(vLastChainNode!=null)
{
pCurrentChainNode=pLastChainNode=vLastChainNode;
pbLast=false;
}
}
public CChainNode CurrentChainNode
{
get
{
return this.pCurrentChainNode;
}
}
public bool NextChainNode()
{
if(this.pFirstChainNode==null)
{
return false;
}
if(pCurrentChainNode==pFirstChainNode && pbFirst==false)
{
pbFirst=true;
return true;
}
else
{
pCurrentChainNode=pCurrentChainNode.NextChainNode;
if(pCurrentChainNode ==null)
{
return false;
}
else
{
return true;
}
}
}
public bool PreviousChainNode()
{
if(this.pLastChainNode==null)
{
return false;
}
if(pCurrentChainNode==pLastChainNode && pbLast==false)
{
pbLast=true;
return true;
}
else