|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|