예제 #1
0
 internal static void ItemsMoved <K, T>(this IAListTreeObserver <K, T> self, InternalList <T> list, int index, int count, AListLeaf <K, T> oldParent, AListLeaf <K, T> newParent)
 {
     for (int i = index; i < index + count; i++)
     {
         self.ItemMoved(list[i], oldParent, newParent);
     }
 }
예제 #2
0
        internal sealed override uint TakeFromLeft(AListNode <K, T> child, IAListTreeObserver <K, T> tob)
        {
            var left = (AListLeaf <K, T>)child;

            if (IsFullLeaf || _isFrozen || left._isFrozen)
            {
                return(0);
            }
            T item = left._list.Last;

            _list.PushFirst(item);
            left._list.PopLast(1);
            if (tob != null)
            {
                tob.ItemMoved(item, left, this);
            }
            return(1);
        }
예제 #3
0
        internal sealed override uint TakeFromRight(AListNode <K, T> child, IAListTreeObserver <K, T> tob)
        {
            var right = (AListLeaf <K, T>)child;

            if (IsFullLeaf || _isFrozen || right._isFrozen)
            {
                return(0);
            }
            T item = right._list.First;

            _list.PushLast(item);
            right._list.PopFirst(1);
            if (tob != null)
            {
                tob.ItemMoved(item, right, this);
            }
            return(1);
        }
예제 #4
0
        internal override uint TakeFromRight(AListNode <K, T> rightSibling, IAListTreeObserver <K, T> tob)
        {
            var right = (AListLeaf <K, T>)rightSibling;

            if (IsFullLeaf || _isFrozen || right._isFrozen)
            {
                return(0);
            }
            T item = right._list.First;

            _list.Add(item);
            right._list.RemoveAt(0);
            if (tob != null)
            {
                tob.ItemMoved(item, right, this);
            }
            return(1);
        }
예제 #5
0
        internal override uint TakeFromLeft(AListNode <K, T> leftSibling, IAListTreeObserver <K, T> tob)
        {
            var left = (AListLeaf <K, T>)leftSibling;

            if (IsFullLeaf || _isFrozen || left._isFrozen)
            {
                return(0);
            }
            T item = left._list.Last;

                        #if true // InternalDList
            _list.PushFirst(item);
            left._list.PopLast(1);
                        #else // InternalList
            _list.Insert(0, item);
            left._list.RemoveAt(left._list.Count - 1);
                        #endif

            if (tob != null)
            {
                tob.ItemMoved(item, left, this);
            }
            return(1);
        }