Internal implementation class. Shared base class of internal nodes for AList<T>, SparseAList<T>, BList<T>, BMultiMap<K,V> and BDictionary<K,V>.
More...
Internal implementation class. Shared base class of internal nodes for AList<T>, SparseAList<T>, BList<T>, BMultiMap<K,V> and BDictionary<K,V>.
|
override long | CountSizeInBytes (int sizeOfT, int sizeOfK) |
| Tallies the memory use of the current node and all child nodes, with the assumption that each object has a header size of two words (e.g. class Foo {} has a size of 16 bytes per Foo object in a 64-bit process), and arrays have a header size of three words. More...
|
|
| AListInnerBase (AListNode< K, T > left, AListNode< K, T > right, int maxNodeSize) |
|
int | BinarySearchI (uint index) |
| Performs a binary search for an index. More...
|
|
override T | GetLastItem () |
| Gets the last item in the last leaf node (needed by B+ trees, but is also called by AListBase<K,T>.Last). More...
|
|
AListNode< K, T > | Child (int i) |
|
override void | SetAt (uint index, T item, IAListTreeObserver< K, T > tob) |
| Sets an item at the specified sub-index. More...
|
|
override bool | RemoveAt (uint index, uint count, IAListTreeObserver< K, T > tob) |
| Removes an item at the specified index. More...
|
|
override void | Freeze () |
|
void | AutoEnlargeChildren (int more) |
|
uint | BaseIndexOf (AListNode< K, T > child) |
|
int | IndexOf (AListNode< K, T > child) |
|
override uint | GetImmutableCount (bool excludeSparse) |
| Diagnostic method. See AListBase<K,T>.GetImmutableCount(). More...
|
|
virtual AListNode< K, T > | Insert (uint index, T item, out AListNode< K, T > splitRight, IAListTreeObserver< K, T > tob) |
| Inserts an item at the specified index. This method can only be called for ALists, since other tree types don't allow insertion at a specific index. More...
|
|
virtual AListNode< K, T > | InsertRange (uint index, IListSource< T > source, ref int sourceIndex, out AListNode< K, T > splitRight, IAListTreeObserver< K, T > tob) |
| Inserts a list of items at the specified index. This method may not insert all items at once, so there is a sourceIndex parameter which points to the next item to be inserted. When sourceIndex reaches source.Count, the insertion is complete. More...
|
|
abstract AListNode< K, T > | DetachedClone () |
| Creates an unfrozen shallow duplicate copy of this node. The child nodes (if this is an inner node) are frozen so that they will require duplication if they are to be modified. The name "DetachedClone" is intended to emphasize that the AListNodeObserver (if any) is not notified, and the clone is effectively independent of the list that it came from. More...
|
|
abstract AListNode< K, T > | CopySection (uint index, uint count, AListBase< K, T > list) |
| Extracts and returns, as fast as possible, a subrange of the list that this node represents. More...
|
|
virtual uint | GetRealItemCount () |
| For sparse lists: counts the number of non-sparse items. More...
|
|
|
| AListInnerBase (AListInnerBase< K, T > frozen) |
|
| AListInnerBase (AListInnerBase< K, T > original, int localIndex, int localCount, uint baseIndex, int maxNodeSize) |
|
| AListInnerBase (AListInnerBase< K, T > original, uint index, uint count, AListBase< K, T > list) |
|
bool | PrepareToInsert (int i, IAListTreeObserver< K, T > tob) |
|
void | TryToShiftItemsToSiblings (int i, IAListTreeObserver< K, T > tob) |
|
AListInnerBase< K, T > | HandleChildSplit (int i, AListNode< K, T > splitLeft, ref AListNode< K, T > splitRight, IAListTreeObserver< K, T > tob) |
| Inserts a slot after _children[i], increasing _childCount and replacing [i] and [i+1] with splitLeft and splitRight. Notifies 'tob' of the replacement, and checks whether this node itself needs to split. More...
|
|
virtual AListInnerBase< K, T > | AutoSplit (out AListNode< K, T > splitRight) |
|
abstract AListInnerBase< K, T > | SplitAt (int divAt, out AListNode< K, T > right) |
| Splits this node into two halves More...
|
|
void | AssertValid () |
|
virtual void | LLInsert (int i, AListNode< K, T > child, uint indexAdjustment) |
| Inserts a child node into _children at index i (resizing _children if necessary), increments _childCount, and adds indexAdjustment to _children[j].Index for all j>i (indexAdjustment can be 0 if i==_childCount). More...
|
|
void | AdjustIndexesAfter (int i, int indexAdjustment) |
|
virtual bool | HandleUndersizedOrAggregateChanged (int i, IAListTreeObserver< K, T > tob) |
|
virtual bool | HandleUndersized (int i, IAListTreeObserver< K, T > tob) |
| This is called by RemoveAt(), DoSingleOperation() for B+ trees, or by the constructor called by CopySection(), when child [i] drops below its normal size range. We'll either distribute the child's items to its siblings, or transfer ONE item from a sibling to increase the node's size. More...
|
|
virtual bool | LLDelete (int i, bool adjustIndexesAfterI) |
| Deletes the child _children[i], shifting all entries afterward to the left, and decrements _childCount. If adjustIndexesAfterI is true, the values of _children[j].Index where j>i are decreased appropriately. More...
|
|
IAListTreeObserver< K, T > | GetObserver (AListBase< K, T > tree) |
| Allows derived classes of AListNode to access AListBase._observer. More...
|
|
bool | HasListChanging (AListBase< K, T > tree) |
| Allows derived classes of AListNode to fire the AListBase.ListChanging event. More...
|
|
void | CallListChanging (AListBase< K, T > tree, ListChangeInfo< T > listChangeInfo) |
| Allows derived classes of AListNode to fire the AListBase.ListChanging event properly. More...
|
|
Removes an item at the specified index.
- Returns
- Returns true if the node is undersized after the removal, or if this is an organized tree and the removal caused the aggregate key (highest key in a B+tree) to change.
When the node is undersized, but is not the root node, the parent will shift an item from a sibling, or discard the node and redistribute its children among existing nodes. If it is the root node, it is only discarded if it is an inner node with a single child (the child becomes the new root node), or it is a leaf node with no children.
Implements Loyc.Collections.Impl.AListNode< K, T >.