Beispiel #1
0
        public void Adjust(Collection.Node Node, ForEachEnum.AdjustIndexType Type)
        {
            if (Node == null || this.mDisposed)
            {
                return;
            }
            switch (Type)
            {
            case ForEachEnum.AdjustIndexType.Insert:
                if (this.mCurrent == null || Node != this.mCurrent.m_Next)
                {
                    break;
                }
                this.mNext = Node;
                break;

            case ForEachEnum.AdjustIndexType.Remove:
                if (Node == this.mCurrent || Node != this.mNext)
                {
                    break;
                }
                this.mNext = this.mNext.m_Next;
                break;
            }
        }
Beispiel #2
0
        private void AdjustEnumeratorsHelper(Collection.Node NewOrRemovedNode, ForEachEnum.AdjustIndexType Type)
        {
            int index = checked (this.m_Iterators.Count - 1);

            while (index >= 0)
            {
                WeakReference iterator = (WeakReference)this.m_Iterators[index];
                if (iterator.IsAlive)
                {
                    ((ForEachEnum)iterator.Target)?.Adjust(NewOrRemovedNode, Type);
                }
                else
                {
                    this.m_Iterators.RemoveAt(index);
                }
                checked { --index; }
            }
        }
 private void AdjustEnumeratorsHelper(Node NewOrRemovedNode, ForEachEnum.AdjustIndexType Type)
 {
     for (int i = this.m_Iterators.Count - 1; i >= 0; i--)
     {
         WeakReference reference = (WeakReference)this.m_Iterators[i];
         if (reference.IsAlive)
         {
             ForEachEnum target = (ForEachEnum)reference.Target;
             if (target != null)
             {
                 target.Adjust(NewOrRemovedNode, Type);
             }
         }
         else
         {
             this.m_Iterators.RemoveAt(i);
         }
     }
 }