using System.Collections.Generic; using UnityEngine; namespace Thousandto.Core.Base { /// /// 一个快速链表类 /// /// public class QuickList { public T[] _buffer; public int _size; public QuickList() { this._buffer = new T[8]; } public QuickList(int capacity) { this._buffer = new T[capacity]; } public void Add(T item) { if ((this._buffer == null) || (this._size == this._buffer.Length)) { this.AllocateMore(); } this._buffer[this._size++] = item; } private void AllocateMore() { T[] array = (this._buffer == null) ? new T[0x20] : new T[Mathf.Max(this._buffer.Length << 1, 0x20)]; if ((this._buffer != null) && (this._size > 0)) { this._buffer.CopyTo(array, 0); } this._buffer = array; } public void Clear() { this._size = 0; } public void Release() { this._size = 0; this._buffer = null; } public void Remove(T item) { if (this._buffer != null) { EqualityComparer comparer = EqualityComparer.Default; for (int i = 0; i < this._size; i++) { if (comparer.Equals(this._buffer[i], item)) { this._size--; this._buffer[i] = default(T); for (int j = i; j < this._size; j++) { this._buffer[j] = this._buffer[j + 1]; } return; } } } } public T Pop() { if (_buffer != null && _size != 0) { T val = _buffer[--_size]; _buffer[_size] = default(T); return val; } return default(T); } public void RemoveAt(int index) { if ((this._buffer != null) && (index < this._size)) { this._size--; this._buffer[index] = default(T); for (int i = index; i < this._size; i++) { this._buffer[i] = this._buffer[i + 1]; } } } public T[] ToArray() { this.Trim(); return this._buffer; } private void Trim() { if (this._size > 0) { if (this._size < this._buffer.Length) { T[] localArray = new T[this._size]; for (int i = 0; i < this._size; i++) { localArray[i] = this._buffer[i]; } this._buffer = localArray; } } else { this._buffer = null; } } public int Count { get { return this._size; } } public T this[int i] { get { return this._buffer[i]; } set { this._buffer[i] = value; } } } }