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; }
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; }
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); } }
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); } } } } }
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); }
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()); }