Пример #1
0
        /// <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);
        }
Пример #2
0
 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;
 }
Пример #3
0
            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);
            }