Beispiel #1
0
        private IEnumerable <TValue> Events()
        {
            IDoubleLinkedListElement <TValue> element = First;

            while (element != null)
            {
                yield return(element.Value);

                element = element.Next;
            }
        }
Beispiel #2
0
        public void AddLast(TValue value)
        {
            IDoubleLinkedListElement <TValue> element = CreateElement(value);

            if (IsEmpty)
            {
                AddFirstElement(element);
            }
            else
            {
                Last.Next    = element;
                element.Prev = Last;
                Last         = element;
                IncrementCounter();
            }
        }
Beispiel #3
0
        public IDoubleLinkedListElement <TValue> FirstOrDefault(TValue value, IDoubleLinkedListElement <TValue> _default)
        {
            IDoubleLinkedListElement <TValue> element = First;

            while (element != null)
            {
                if (element.Value.Equals(value))
                {
                    return(element);
                }

                element = element.Next;
            }

            return(_default);
        }
Beispiel #4
0
        public void Clear()
        {
            IDoubleLinkedListElement <TValue> element = First;

            while (element != null)
            {
                var nextElement = element.Next;

                EraseElement(element);
                DecrementCounter();

                element = nextElement;
            }

            First = null;
            Last  = null;
        }
Beispiel #5
0
        public void AddAfter(TValue valueAfter, TValue value)
        {
            IDoubleLinkedListElement <TValue> elementAfter = CreateElement(valueAfter);
            IDoubleLinkedListElement <TValue> element      = FirstOrDefault(value, null);

            if (element == null)
            {
                throw new ElementNotFoundException <TValue>(value);
            }
            else if (element.Next == null)
            {
                AddLast(valueAfter);
            }
            else
            {
                elementAfter.Prev = element;
                elementAfter.Next = element.Next;
                element.Next.Prev = elementAfter;
                element.Next      = elementAfter;
                IncrementCounter();
            }
        }
Beispiel #6
0
        public void AddBefore(TValue valueBefore, TValue value)
        {
            IDoubleLinkedListElement <TValue> elementBefore = CreateElement(valueBefore);
            IDoubleLinkedListElement <TValue> element       = FirstOrDefault(value, null);

            if (element == null)
            {
                throw new ElementNotFoundException <TValue>(value, this);
            }
            else if (element.Prev == null)
            {
                AddFirst(valueBefore);
            }
            else
            {
                elementBefore.Prev = element.Prev;
                elementBefore.Next = element;
                element.Prev.Next  = elementBefore;
                element.Prev       = elementBefore;
                IncrementCounter();
            }
        }
Beispiel #7
0
        public void Remove(TValue value)
        {
            IDoubleLinkedListElement <TValue> element = FirstOrDefault(value, null);

            if (element == null)
            {
                throw new ElementNotFoundException <TValue>(value);
            }
            else if (element.Prev == null)
            {
                RemoveFirst();
            }
            else if (element.Next == null)
            {
                RemoveLast();
            }
            else
            {
                element.Prev.Next = element.Next;
                element.Next.Prev = element.Prev;
                EraseElement(element);
                DecrementCounter();
            }
        }
Beispiel #8
0
 private void AddFirstElement(IDoubleLinkedListElement <TValue> element)
 {
     First = element;
     Last  = element;
     IncrementCounter();
 }
Beispiel #9
0
 private void EraseElement(IDoubleLinkedListElement <TValue> element)
 {
     element.Prev = null;
     element.Next = null;
     element      = null;
 }