/// <summary> /// Dequeue an item. /// </summary> /// <exception cref="InvalidOperationException">Queue is empty.</exception> public T Dequeue() { if (_count == 0) { throw new InvalidOperationException(Strings.QueueIsEmpty); } var result = Linx.Clear(ref _buffer[_offset]); if (--_count == 0) { _offset = 0; if (_buffer.Length > _initialCapacity) { _buffer = null; } } else { if (++_offset == _buffer.Length) { _offset = 0; } } return(result); }
public void Add(TElement element) { if (Count == _elements.Length) { var old = Linx.Exchange(ref _elements, new TElement[_elements.Length * 2]); Array.Copy(old, 0, _elements, 0, old.Length); } _elements[Count++] = element; }
protected TQueue DequeueOne() { if (IsEmpty) { throw new InvalidOperationException(Strings.QueueIsEmpty); } var result = Linx.Clear(ref _buffer[_offset++]); if (--_count == 0) { _offset = 0; if (_buffer.Length < _initialCapacity) { _buffer = null; } } else if (_offset == _buffer.Length) { _offset = 0; } return(result); }