public void Replace(DoublyLinkedNode <T> node, T value)
        {
            if (node is null)
            {
                throw new ArgumentNullException(nameof(node));
            }

            PracticeExtensions.ThrowIfNull(value, nameof(value));

            var nodeIsFirst = ReferenceEquals(First, node);
            var nodeIsLast  = ReferenceEquals(Last, node);

            if (nodeIsFirst)
            {
                var newNode = First.Replace(value);
                First = newNode;
            }

            if (nodeIsLast)
            {
                var newNode = Last.Replace(value);
                Last = newNode;
            }

            if (!nodeIsFirst && !nodeIsLast)
            {
                node.Replace(value);
            }
        }
Example #2
0
    internal DoublyLinkedNode <T> LinkBefore(T value)
    {
        PracticeExtensions.ThrowIfNull(value, nameof(value));

        var newNode = new DoublyLinkedNode <T>(value);

        ReplacePrevious(newNode);

        newNode.Next = this;

        return(newNode);
    }
Example #3
0
    internal DoublyLinkedNode <T> Replace(T value)
    {
        PracticeExtensions.ThrowIfNull(value, nameof(value));

        var replacement = new DoublyLinkedNode <T>(value);

        ReplacePrevious(replacement);

        ReplaceNext(replacement);

        return(replacement);
    }
        public void AddFirst(T value)
        {
            PracticeExtensions.ThrowIfNull(value, nameof(value));

            if (First is null)
            {
                SetFirstNode(value);
            }
            else
            {
                First = First.LinkBefore(value);
            }

            Count++;
        }
Example #5
0
    public DoublyLinkedNode(T value)
    {
        PracticeExtensions.ThrowIfNull(value, nameof(value));

        Value = value;
    }