internal void OpenSpaceAndInsert(T value, VerticalLinkedList <T> listAfter, VerticalLinkedList <T> listBefore)
    {
        if (!IsFull)
        {
            throw new InvalidOperationException();
        }
        var slot = WhereToInsert(value);

        if (listAfter != null && listBefore != null && listAfter._lastIndex - slot < slot - listBefore._lastIndex)
        {
            listBefore = null;
        }
        if (listBefore == null)
        {
            for (int i = listAfter._lastIndex; i >= slot; i--)
            {
                _bigArray[i + 1] = _bigArray[i];
            }
            listAfter.Depth += 1;
        }
        else
        {
            var nextFirst = listBefore._firstIndex + _maxDepth;
            listBefore.Depth += 1;
            _bigArray[listBefore._lastIndex] = _bigArray[nextFirst];
            slot--;
            for (int i = nextFirst; i < slot; i++)
            {
                _bigArray[i] = _bigArray[i + 1];
            }
        }
        _bigArray[slot] = value;
    }
    internal VerticalLinkedList <T> CopyTo(T[] newArray, int newMaxDepth, int firstIndex)
    {
        var newList = new VerticalLinkedList <T>(newArray, newMaxDepth, firstIndex);
        var index   = _firstIndex;

        for (int i = Depth; i > 0; i--)
        {
            newArray[firstIndex++] = _bigArray[index++];
        }
        newList.Depth = Depth;
        return(newList);
    }
    internal void Receive(VerticalLinkedList <T> from)
    {
        if (from == null)
        {
            throw new ArgumentNullException(nameof(from));
        }
        int delta = from._firstIndex;

        for (int i = from.Depth - 1; i >= 0; i--)
        {
            _bigArray[i] = _bigArray[i + delta];
        }
        Depth      = from.Depth;
        from.Depth = 0;
    }
Esempio n. 4
0
 internal void Add(VerticalLinkedList <T> list)
 {
     list.Clear();
     _lists.Add(list.Id, list);
 }