usingHslCommunication.Core;usingSystem;usingSystem.Collections.Generic;namespaceHslCommunication.BasicFramework{///<summary>///一个高效的数组管理类,用于高效控制固定长度的数组实现///</summary>///<typeparamname="T">泛型类型</typeparam>publicclassSharpList<T>{#regionConstructor///<summary>///实例化一个对象,需要指定数组的最大数据对象///</summary>///<paramname="count">数据的个数</param>///<paramname="appendLast">是否从最后一个数添加</param>publicSharpList(intcount,boolappendLast=false){if(count>8192)capacity=4096;this.array=newT[capacity+count];this.hybirdLock=newSimpleHybirdLock();this.count=count;if(appendLast)this.lastIndex=count;}#endregion#regionPublicProperties///<summary>///获取数据的个数///</summary>publicintCount=>count;#endregion#regionPublicMethod///<summary>///新增一个数据值///</summary>///<paramname="value">数据值</param>publicvoidAdd(Tvalue){hybirdLock.Enter();if(lastIndex<(capacity+count)){array[lastIndex++]=value;}else{//需要重新挪位置了T[]buffer=newT[capacity+count];Array.Copy(array,capacity,buffer,0,count);array=buffer;lastIndex=count;}hybirdLock.Leave();}///<summary>///批量的增加数据///</summary>///<paramname="values">批量数据信息</param>publicvoidAdd(IEnumerable<T>values){foreach(varminvalues){Add(m);}}///<summary>///获取数据的数组值///</summary>///<returns>数组值</returns>publicT[]ToArray(){T[]result=null;hybirdLock.Enter();if(lastIndex<count){result=newT[lastIndex];Array.Copy(array,0,result,0,lastIndex);}else{result=newT[count];Array.Copy(array,lastIndex-count,result,0,count);}hybirdLock.Leave();returnresult;}///<summary>///获取或设置指定索引的位置的数据///</summary>///<paramname="index">索引位置</param>///<returns>数据值</returns>publicTthis[intindex]{get{if(index<0)thrownewIndexOutOfRangeException("Index must larger than zero");if(index>=count)thrownewIndexOutOfRangeException("Index must smaller than array length");Ttmp=default(T);hybirdLock.Enter();if(lastIndex<count){tmp=array[index];}else{tmp=array[index+lastIndex-count];}hybirdLock.Leave();returntmp;}set{if(index<0)thrownewIndexOutOfRangeException("Index must larger than zero");if(index>=count)thrownewIndexOutOfRangeException("Index must smaller than array length");hybirdLock.Enter();if(lastIndex<count){array[index]=value;}else{array[index+lastIndex-count]=value;}hybirdLock.Leave();}}#endregion#regionprivateMemberprivateT[]array;privateintcapacity=2048;//整个数组的附加容量privateintcount=0;//数组的实际数据容量privateintlastIndex=0;//最后一个数的索引位置privateSimpleHybirdLockhybirdLock;//数组的操作锁#endregion}}