Пример #1
0
        public T Shift()
        {
            Header.Validate(x => x != null, new InvalidOperationException(Messages.DequeEmptyError));
            var item = default(T);

            if (Header == Header.Previous && Header == Header.Next)
            {
                item   = Header.Entry;
                Header = null;
            }
            else
            {
                var second = Header.Next;
                var last   = Header.Previous;
                var first  = Header;
                item            = Header.Entry;
                last.Next       = second;
                second.Previous = last;
                Header          = second;
                first.Previous  = null;
                first.Next      = null;
            }

            return(item);
        }
Пример #2
0
 private void MakeHeader(T item)
 {
     Header          = new DoublyLinkedEntry <T>();
     Header.Entry    = item;
     Header.Next     = Header;
     Header.Previous = Header;
 }
Пример #3
0
 public void Append(T item)
 {
     if (Header == null)
     {
         MakeHeader(item);
     }
     else
     {
         var newEntry = new DoublyLinkedEntry <T>();
         newEntry.Entry       = item;
         newEntry.Previous    = Header.Previous;
         Header.Previous.Next = newEntry;
         Header.Previous      = newEntry;
         newEntry.Next        = Header;
     }
 }
Пример #4
0
        public T Pop()
        {
            Header.Validate(x => x != null, new InvalidOperationException(Messages.DequeEmptyError));
            var item = default(T);

            if (Header == Header.Previous && Header == Header.Next)
            {
                item   = Header.Entry;
                Header = null;
            }
            else
            {
                var last = Header.Previous;
                item               = last.Entry;
                Header.Previous    = last.Previous;
                last.Previous.Next = Header;
                last.Previous      = null;
                last.Next          = null;
            }

            return(item);
        }
Пример #5
0
 public void Prepend(T item)
 {
     Append(item);
     Header = Header.Previous;
 }