コード例 #1
0
 internal PriorityQueueDecumulator(LinkedPriorityQueue <T> queue)
 {
     m_queue                   = queue;
     m_enumerator              = m_queue.m_priorityLevels.Values.GetEnumerator();
     m_pendingLevelRemovals    = new List <int>();
     m_currentLevelDecumulator = null;
     m_currentLevel            = null;
 }
コード例 #2
0
 public PriorityQueueDecumulator(LinkedPriorityQueue <T> queue)
 {
     this.m_queue                   = queue;
     this.m_enumerator              = (IEnumerator <PriorityLevel>)(object) this.m_queue.m_priorityLevels.Values.GetEnumerator();
     this.m_pendingLevelRemovals    = new List <int>();
     this.m_currentLevelDecumulator = null;
     this.m_currentLevel            = null;
 }
コード例 #3
0
 internal T Dequeue()
 {
     Global.Tracer.Assert(!m_pendingDecumulatorCommit, "Cannot perform operations on the queue until the open enumerator is Disposed");
     using (IDecumulator <T> decumulator = GetDecumulator())
     {
         decumulator.MoveNext();
         T current = decumulator.Current;
         decumulator.RemoveCurrent();
         return(current);
     }
 }
コード例 #4
0
        protected sealed override void FulfillInProgressFree()
        {
            int num = m_cachePriority.Count;

            while (m_inProgressFreeBytes > 0 && num > 0)
            {
                num--;
                ItemHolder    itemHolder = m_cachePriority.Peek();
                BaseReference reference  = itemHolder.Reference;
                if (reference.PinCount == 0)
                {
                    m_cachePriority.ExtractLRU();
                    reference.InQueue = InQueueState.None;
                    if (itemHolder.Item != null)
                    {
                        UpdateStatsForRemovedItem(reference, ref m_inProgressFreeBytes);
                        CacheRemoveValue(reference.Id);
                        itemHolder.Item      = null;
                        itemHolder.Reference = null;
                        reference.Item       = null;
                    }
                }
                else
                {
                    m_cachePriority.Bump(itemHolder);
                }
            }
            if (m_inProgressFreeBytes <= 0)
            {
                return;
            }
            using (IDecumulator <BaseReference> decumulator = m_serializationQueue.GetDecumulator())
            {
                while (m_inProgressFreeBytes > 0 && decumulator.MoveNext())
                {
                    BaseReference current = decumulator.Current;
                    decumulator.RemoveCurrent();
                    if (current.Item != null)
                    {
                        if (current.PinCount == 0)
                        {
                            UpdateStatsForRemovedItem(current, ref m_inProgressFreeBytes);
                        }
                        WriteItem(current);
                        if (current.PinCount > 0)
                        {
                            EnqueueItem(current);
                            CacheSetValue(current.Id, current);
                        }
                    }
                }
            }
        }
コード例 #5
0
 public bool MoveNext()
 {
     if (m_currentLevel == null || (m_currentLevelDecumulator != null && !m_currentLevelDecumulator.MoveNext()))
     {
         if (!m_enumerator.MoveNext())
         {
             return(false);
         }
         m_currentLevel            = m_enumerator.Current;
         m_currentLevelDecumulator = m_currentLevel.Queue.GetDecumulator();
         return(m_currentLevelDecumulator.MoveNext());
     }
     return(true);
 }
コード例 #6
0
 public bool MoveNext()
 {
     if (this.m_currentLevel != null && (this.m_currentLevelDecumulator == null || this.m_currentLevelDecumulator.MoveNext()))
     {
         return(true);
     }
     if (!this.m_enumerator.MoveNext())
     {
         return(false);
     }
     this.m_currentLevel            = this.m_enumerator.Current;
     this.m_currentLevelDecumulator = this.m_currentLevel.Queue.GetDecumulator();
     return(this.m_currentLevelDecumulator.MoveNext());
 }