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); } }
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); }
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); }
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); }
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); }