public void RemoveCurrent() { m_currentLevelDecumulator.RemoveCurrent(); if (m_currentLevel.Queue.Count == 0) { m_pendingLevelRemovals.Add(m_currentLevel.Priority); 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); } } } } }