A sparse A-List that implements ISparseList{T}.
An article about this class is available.
The sparse A-List is implemented similarly to a normal A-List; the main difference is that leaf nodes have a list of (int, T) pairs rather than a list of T values. The integers represent the relative index of each T value, as an offset from the beginning of the node. This allows an arbitrary amount of empty space to exist between each T value in the list, making it sparse.
SparseAList
is a precise sparse list, meaning that you can rely on it to keep track of which indexes are "set" and which are "empty" (the IsSet method tells you which).
TODO: Add support for A-List tree observers (IAListTreeObserver(K,T))
|
| SparseAList (IEnumerable< T > items) |
|
| SparseAList (IListSource< T > items) |
|
| SparseAList (ISparseListSource< T > items) |
|
| SparseAList (int maxLeafSize) |
|
| SparseAList (int maxLeafSize, int maxInnerSize) |
|
| SparseAList (SparseAList< T > items, bool keepListChangingHandlers) |
|
sealed override void | Add (T item) |
|
void | AddRange (IEnumerable< T > list) |
|
sealed override void | Insert (int index, T item) |
|
void | InsertRange (int index, SparseAList< T > source) |
|
void | InsertRange (int index, SparseAList< T > source, bool move) |
|
sealed override void | InsertRange (int index, IEnumerable< T > list) |
|
sealed override void | InsertRange (int index, IListSource< T > list) |
|
void | InsertRange (int index, ISparseListSource< T > list) |
| Inserts another sparse list into this one. More...
|
|
new SparseAList< T > | Clone () |
|
SparseAList< T > | Clone (bool keepListChangingHandlers) |
|
SparseAList< T > | CopySection (int start, int subcount) |
|
new SparseAList< T > | RemoveSection (int start, int count) |
|
void | Swap (SparseAList< T > other) |
| Swaps the contents of two SparseAList{T}s in O(1) time. More...
|
|
virtual void | Append (SparseAList< T > other) |
|
virtual void | Append (SparseAList< T > other, bool move) |
|
virtual void | Prepend (SparseAList< T > other) |
| Prepends an AList to this list in sublinear time. More...
|
|
virtual void | Prepend (SparseAList< T > other, bool move) |
| Prepends an AList to this list in sublinear time. More...
|
|
sealed override bool | TrySet (int index, T value) |
|
void | ClearSpace (int index, int count=1) |
| Unsets the range of indices index to index+count-1 inclusive. If index + count > Count , the sparse list shall enlarge Count to be equal to index + count . More...
|
|
void | InsertSpace (int index, int count=1) |
| Inserts empty space starting at the specified index. More...
|
|
bool | IsSet (int index) |
| Determines whether a value exists at the specified index. More...
|
|
T | NextHigherItem (ref int?index) |
| Increases index by at least one to reach the next index that is not classified as empty space, and returns the item at that index. More...
|
|
T | NextLowerItem (ref int?index) |
| Decreases index by at least one to reach the next index that is not classified as empty space, and returns the item at that index. More...
|
|
override int | IndexOf (T item) |
| Finds an index of an item in the list. More...
|
|
int | GetRealImmutableCount () |
|
int | GetRealItemCount () |
|
| AListBase (int maxLeafSize) |
|
| AListBase (int maxLeafSize, int maxInnerSize) |
|
| AListBase (AListBase< T > items, bool keepListChangingHandlers) |
|
void | AddRange (IListSource< T > source) |
|
void | AddRange (AList< T > source) |
|
void | Resize (int newSize) |
|
bool | Contains (T item) |
| Returns true if-and-only-if the specified item exists in the list. More...
|
|
bool | Remove (T item) |
| Finds a specific item and removes it. If duplicates of the item exist, only the first occurrence is removed. More...
|
|
AListBase< T > | Clone () |
|
AListBase< T > | RemoveSection (int start, int count) |
|
new ListSlice< T > | Slice (int start, int length) |
| Returns a sub-range of this list. More...
|
|
void | RemoveAt (int index) |
|
void | RemoveRange (int index, int amount) |
|
int | RemoveAll (Predicate< T > match) |
| Removes all the elements that match the conditions defined by the specified predicate. More...
|
|
virtual void | Clear () |
|
IEnumerable< int > | IndexesOf (T item) |
| Returns a sequence of integers that represent the locations where a given item appears in the list. More...
|
|
virtual IEnumerable< int > | IndexesOf (T item, int minIndex, int maxIndex) |
|
int | LinearScanFor (T item, int startIndex, EqualityComparer< T > comparer) |
| Scans the list starting at startIndex and going upward, and returns the index of an item that matches the first argument. More...
|
|
void | CopyTo (T[] array, int arrayIndex) |
|
Enumerator | GetEnumerator () |
|
Enumerator | GetEnumerator (int startIndex) |
|
Enumerator | GetEnumerator (int start, int subcount) |
|
Enumerator | GetEnumerator (int start, int subcount, bool startAtEnd) |
|
T | TryGet (int index, out bool fail) |
| Gets the item at the specified index, and does not throw an exception on failure. More...
|
|
virtual void | Freeze () |
| Prevents further changes to the list. More...
|
|
Slice_< T > | Slice (int start, int length) |
| Returns a sub-range of this list. More...
|
|
int | GetImmutableCount () |
| Diagnostic method. Returns the number of elements of the list that are located in immutable nodes, which will be copied if modified. Used by the test suite. More...
|
|
virtual bool | AddObserver (IAListTreeObserver< K, T > observer) |
| Attaches a tree observer to this object. More...
|
|
virtual bool | RemoveObserver (IAListTreeObserver< K, T > observer) |
| Removes a previously attached tree observer from this list. More...
|
|
int | RemoveAll (Predicate< T > match) |
| Removes the all the elements that match the conditions defined by the specified predicate. More...
|
|
void | Clear () |
|
bool | Remove (T item) |
|
void | RemoveRange (int index, int amount) |
|
|
| SparseAList (AListBase< int, T > original, AListNode< int, T > section) |
|
override AListNode< int, T > | NewRootLeaf () |
|
override void | Clone (out AListBase< T > clone) |
|
override AListBase< T > | cov_RemoveSection (int start, int count) |
|
| AListBase (AListBase< int, T > original, AListNode< int, T > section) |
|
override AListInnerBase< int, T > | SplitRoot (AListNode< int, T > left, AListNode< int, T > right) |
|
void | DetectSizeOverflow (int insertSize) |
| Throws OverflowException if inserting the specified number of items would cause Count to overflow. More...
|
|
void | BeginInsertRange (int index, IListSource< T > items, int itemsCount) |
|
void | DoneInsertRange (int amountInserted) |
|
void | InsertRange (int index, AListBase< T > source, bool move) |
|
virtual void | Combine (AListBase< T > other, bool move, bool append) |
|
| AListBase (int maxLeafSize) |
|
| AListBase (int maxLeafSize, int maxInnerSize) |
|
| AListBase (AListBase< K, T > items, bool keepListChangingHandlers) |
| Cloning constructor. Does not duplicate the observer (IAListTreeObserver{K,T}), if any, because it may not be cloneable. More...
|
|
| AListBase (AListBase< K, T > original, AListNode< K, T > section) |
| This is the constructor that CopySection(), which can be defined by derived classes, should call to create a sublist of a list. Used in conjunction with CopySectionHelper(). More...
|
|
abstract AListInnerBase< K, T > | SplitRoot (AListNode< K, T > left, AListNode< K, T > right) |
|
virtual Enumerator | NewEnumerator (uint start, uint firstIndex, uint lastIndex) |
|
void | CheckPoint () |
|
void | AutoThrow () |
|
void | AutoCreateOrCloneRoot () |
|
void | AutoSplit (AListNode< K, T > splitLeft, AListNode< K, T > splitRight) |
|
void | HandleChangedOrUndersizedRoot (AListNode< K, T > result) |
|
virtual void | ClearInternal (bool forceClear) |
| Clears the tree. More...
|
|
AListNode< K, T > | CopySectionHelper (int start, int subcount) |
| Together with the AListBase{K,T}.AListBase(AListBase{K,T},AListNode{K,T}) constructor, this method helps implement the CopySection() method in derived classes, by cloning a section of the tree. More...
|
|
AListNode< K, T > | CopySectionHelper (uint start, uint subcount) |
|
void | SwapHelper (AListBase< K, T > other, bool swapObservers) |
| Swaps two ALists. More...
|
|