public void AddPriorityItem(Lifetimed <T> item) { EnsureCapacity(); Array.Copy(myItems, Marker, myItems, Marker + 1, mySize - Marker); myItems[Marker++] = item; mySize++; }
private void EnsureCapacity() { if (myItems == null) { myItems = new Lifetimed <T> [1]; } if (mySize < myItems.Length) { return; } // we have to make new array ALWAYS at this point, because this method could be called during enumeration and we want enumeration to work in a snapshot fashion var countAfterCleaning = 0; var markerDecrement = 0; var newItems = new Lifetimed <T> [mySize * 2]; //Count can't be zero here for (var i = 0; i < mySize; i++) { if (myItems[i].Lifetime.IsAlive) { newItems[countAfterCleaning++] = myItems[i]; } else if (i < Marker) { markerDecrement++; } } mySize = countAfterCleaning; Marker -= markerDecrement; myItems = newItems; }
public void Add(Lifetimed <T> item) { EnsureCapacity(); myItems[mySize++] = item; }