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 { pCurrentChainNode=pCurrentChainNode.PreviousChainNode; if(pCurrentChainNode ==null) { return false; } else { return true; } } } } public CChainNode FirstChainNode; public CChainNode LastChainNode; public CChainNode CurrentChainNode; public CChain() { this.FirstChainNode=this.LastChainNode=this.CurrentChainNode =null; } ~CChain() { } public bool IsEmpty() { if(this.FirstChainNode==null) { return true; } else { return false; } } public bool AppendChainNode(CChainNode vChainNode) { if(vChainNode==null) { return false; } else { if(this.FirstChainNode==null) { this.FirstChainNode=vChainNode; this.FirstChainNode.PreviousChainNode=null; this.FirstChainNode.NextChainNode=null; this.LastChainNode=this.CurrentChainNode=this.FirstChainNode; } else { this.CurrentChainNode.NextChainNode=vChainNode; vChainNode.PreviousChainNode=this.CurrentChainNode; vChainNode.NextChainNode=null; this.LastChainNode=this.CurrentChainNode=vChainNode; } return true; } } public bool InsertChainNode(int Index,CChainNode vChainNode) { CChainNode pCn; int pCount=0; CChain.CChainIterator pCi=new CChainIterator(this.FirstChainNode,null); if(vChainNode==null || Index<0) { return false; } if(Index==0) { pCn=this.FirstChainNode; vChainNode.NextChainNode=pCn; pCn.PreviousChainNode=vChainNode; this.FirstChainNode=vChainNode; vChainNode.PreviousChainNode=null; return true; } while(pCi.NextChainNode()==true) { pCount++; if(pCount==Index) { pCn=pCi.CurrentChainNode.NextChainNode; pCi.CurrentChainNode.NextChainNode=vChainNode; vChainNode.PreviousChainNode=pCi.CurrentChainNode; vChainNode.NextChainNode=pCn; if(pCn!=null) { pCn.PreviousChainNode=vChainNode; } return true; } } return false; } public bool ContainsKey(string vKey) { CChain.CChainIterator pCi=new CChainIterator(this.FirstChainNode,null); while(pCi.NextChainNode()==true) { if(pCi.CurrentChainNode.Key ==vKey) { return true; } } return false; } public CChain.CChainNode Item(string vKey) { CChain.CChainIterator pCi=new CChainIterator(this.FirstChainNode,null); while(pCi.NextChainNode()==true) { if(pCi.CurrentChainNode.Key ==vKey) { return pCi.CurrentChainNode; } } return null; } public object ItemData(string vKey) { CChain.CChainIterator pCi=new CChainIterator(this.FirstChainNode,null); while(pCi.NextChainNode()==true) { if(pCi.CurrentChainNode.Key ==vKey) { return pCi.CurrentChainNode.Data; } } return null; } public int ChainNodeCount() { int pCount=0; CChain.CChainIterator pCi=new CChainIterator(this.FirstChainNode,null); while(pCi.NextChainNode()==true) { pCount++; } return pCount; } } }

|