You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

247 lines
7.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace Dat2Bin
{
public class LinkList
{
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private int _length;//ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ
public int Length
{
get { return _length; }
}//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵĽӿ<C4BD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>
private Node _head;//<2F><><EFBFBD><EFBFBD>ͷ
public Node head
{
get { return _head; }
}
private Node _end;//<2F><><EFBFBD><EFBFBD>β
public Node End
{
get { return _end; }
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵindex<65><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ㡣
/// </summary>
/// <param name="index"></param>
/// <param name="flag"></param>
/// <returns></returns>
private Node FindNodeByIndex(int index)
{
//<2F><><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3><EFBFBD><ECB3A3>
//<2F><EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30>indexΪ0ҲΪ<D2B2><EFBFBD><ECB3A3>index<0<><30>ΪԽ<CEAA>
if (_length <= index || index < 0) throw new IndexOutOfRangeException("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ޡ<EFBFBD>");
Node flag = null;
int hcount = index;//<2F><>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>
int ecount = _length - index - 1;//<2F><>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ҵĿ<D2B5><C4BF><EFBFBD>С<EFBFBD>ڵ<EFBFBD><DAB5>ڴ<EFBFBD>β<EFBFBD><CEB2><EFBFBD>ҵĿ<D2B5><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD>
if (hcount <= ecount)
{
flag = _head;
int count = hcount;//<2F>ؼ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>˫<EFBFBD><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><>ʼ<EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ǣ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>Ƶ<EFBFBD>Ҫ<EFBFBD>ҵ<EFBFBD><D2B5>Ľڵ<C4BD>λ<EFBFBD><CEBB>
while (count > 0)
{
flag = flag.Next;
count--;
}
}
else
{
flag = _end;
int count = ecount;//<2F>ؼ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>˫<EFBFBD><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><>ʼ<EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ǣ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>Ƶ<EFBFBD>Ҫ<EFBFBD>ҵ<EFBFBD><D2B5>Ľڵ<C4BD>λ<EFBFBD><CEBB>
while (count > 0)
{
flag = flag.Pre;
count--;
}
}
//<2F><>ʱ<EFBFBD><CAB1>flagλ<67>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>
return flag;
}
public LinkList()
{
//<2F>½<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>Ϊ0
_head = null;
_end = null;
_length = 0;
}
/// <summary>
/// <20><>T<EFBFBD><54><EFBFBD>͵<EFBFBD>dataװ<61><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public void Add(string fileName, string SafeFileName, DateTime fileStartTime, DateTime fileEndTime, HEADInfo file_head)
{
//<2F>½<EFBFBD>һ<EFBFBD>ڵ<EFBFBD>
Node newNode = new Node();
newNode.Next = null;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊβ<CEAA><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nextָ<74><D6B8><EFBFBD>ض<EFBFBD>Ϊ<EFBFBD><CEAA>
newNode.data.fileName = fileName;
newNode.data.SafeFileName = SafeFileName;
newNode.data.fileStartTime = fileStartTime;
newNode.data.fileEndTime = fileEndTime;
newNode.data.fileHead = file_head;
if (_head == null) //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD>ڵ<EFBFBD>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD>
{
_head = newNode; //_headֱ<64><D6B1>ָ<EFBFBD><D6B8><EFBFBD>½<EFBFBD><C2BD>Ľڵ㡣
_head.Pre = null; //<2F><><EFBFBD>½<EFBFBD><C2BD>Ľڵ<C4BD><DAB5><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊnull
}
else
{
_end.Next = newNode;
newNode.Pre = _end; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>
}
_end = newNode; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>β<EFBFBD><CEB2>
_length++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>һ
}
public void Add(string fileName, string SafeFileName, DateTime fileStartTime, DateTime fileEndTime, HEADInfo file_head, byte transtimeOK)
{
//<2F>½<EFBFBD>һ<EFBFBD>ڵ<EFBFBD>
Node newNode = new Node();
newNode.Next = null;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊβ<CEAA><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nextָ<74><D6B8><EFBFBD>ض<EFBFBD>Ϊ<EFBFBD><CEAA>
newNode.data.fileName = fileName;
newNode.data.SafeFileName = SafeFileName;
newNode.data.fileStartTime = fileStartTime;
newNode.data.fileEndTime = fileEndTime;
newNode.data.fileHead = file_head;
newNode.data.transtimeOK = transtimeOK;
if (_head == null) //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD>ڵ<EFBFBD>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD>
{
_head = newNode; //_headֱ<64><D6B1>ָ<EFBFBD><D6B8><EFBFBD>½<EFBFBD><C2BD>Ľڵ㡣
_head.Pre = null; //<2F><><EFBFBD>½<EFBFBD><C2BD>Ľڵ<C4BD><DAB5><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊnull
}
else
{
_end.Next = newNode;
newNode.Pre = _end; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>
}
_end = newNode; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>β<EFBFBD><CEB2>
_length++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>һ
}
/// <summary>
/// <20><>T<EFBFBD><54><EFBFBD>͵<EFBFBD>dataװ<61><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public void Add(SiteParameter data)
{
//<2F>½<EFBFBD>һ<EFBFBD>ڵ<EFBFBD>
Node newNode = new Node();
newNode.Next = null;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊβ<CEAA><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nextָ<74><D6B8><EFBFBD>ض<EFBFBD>Ϊ<EFBFBD><CEAA>
newNode.data = data;
if (_head == null) //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD>ڵ<EFBFBD>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD>
{
_head = newNode; //_headֱ<64><D6B1>ָ<EFBFBD><D6B8><EFBFBD>½<EFBFBD><C2BD>Ľڵ㡣
_head.Pre = null; //<2F><><EFBFBD>½<EFBFBD><C2BD>Ľڵ<C4BD><DAB5><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊnull
}
else
{
_end.Next = newNode;
newNode.Pre = _end; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>
}
_end = newNode; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>β<EFBFBD><CEB2>
_length++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>һ
}
/// <summary>
/// <20>Ƴ<EFBFBD>ָ<EFBFBD><D6B8>λ<EFBFBD>õ<EFBFBD>Ԫ<EFBFBD><D4AA>
/// </summary>
/// <param name="index"></param>
public void RemoveAt(int index)
{
//Խ<><D4BD><EFBFBD><EFBFBD>exception<6F>Ѿ<EFBFBD><D1BE><EFBFBD>FindNodeByIndex<65>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ˡ<EFBFBD>
Node flag = FindNodeByIndex(index);
//flag<61><67><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD>Ҫɾ<D2AA><C9BE><EFBFBD>Ľڵ㴦<DAB5><E3B4A6>
if (_head.Next == null)//ֻ<><D6BB>һ<EFBFBD><D2BB><EFBFBD>ڵ㣬<DAB5><E3A3AC>indexû<78><C3BB>Խ<EFBFBD>缴ɾ<E7BCB4><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_head
{
//ֱ<>Ӹ<EFBFBD><D3B8><EFBFBD>
_head = null;
_end = null;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ flag.Next.Pre = flag.Pre;
//_head.Next<78><74><EFBFBD><EFBFBD>Ϊ<EFBFBD>վͲ<D5BE><CDB2><EFBFBD><EFBFBD><EFBFBD>Preָ<65><D6B8>
}
else//<2F>ж<EFBFBD><D0B6><EFBFBD>һ<EFBFBD>Ľڵ<C4BD>,<2C><>indexû<78><C3BB>Խ<EFBFBD><D4BD>,<2C><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD>ͳһ<CDB3><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//ɾ<><C9BE><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (index == _length - 1) _end = _end.Pre;
else flag.Next.Pre = flag.Pre;
if (index == 0) _head = flag.Next;
else flag.Pre.Next = flag.Next;
}
_length--;//<2F>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD>û<EFBFBD><C3BB>Խ<EFBFBD><EFBFBD>ʳ<EFBFBD><CAB3><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>֮<EFBFBD>󣬱<EFBFBD>Ȼ<EFBFBD><C8BB>һ
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֶΣ<D6B6><CEA3>ͱ<EFBFBD><CDB1><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ԡ<EFBFBD>
}
public SiteParameter GetnodeData(int position)
{
Node flag = FindNodeByIndex(position - 1);//<2F><>1<EFBFBD><31>ʼ
return flag.data;
}
public void SetNodeData(int position, ref SiteParameter data)
{
Node flag = FindNodeByIndex(position - 1);//<2F><>1<EFBFBD><31>ʼ
flag.data = data;
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SiteParameter<65><72><EFBFBD>ߵ<EFBFBD>ֵ
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public SiteParameter this[int index]
{
get
{
Node flag = FindNodeByIndex(index);
return flag.data;
}
set
{
Node flag = FindNodeByIndex(index);
flag.data = value;
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public void Clear()
{
_head = null;
_end = null;
_length = 0;
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ԫ<EFBFBD>صĸ<D8B5><C4B8><EFBFBD>
/// </summary>
public int GetLength()
{
return _length;
}
}
}