Пример #1
0
 public void AddPriorityItem(Lifetimed <T> item)
 {
     EnsureCapacity();
     Array.Copy(myItems, Marker, myItems, Marker + 1, mySize - Marker);
     myItems[Marker++] = item;
     mySize++;
 }
Пример #2
0
        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;
        }
Пример #3
0
 public void Add(Lifetimed <T> item)
 {
     EnsureCapacity();
     myItems[mySize++] = item;
 }