An sorted dictionary that allows multiple values to be associated with a single key. Note: both keys and values must be comparable.
More...
An sorted dictionary that allows multiple values to be associated with a single key. Note: both keys and values must be comparable.
An article about the BList classes is available.
Often when people want to be able to associate multiple values with a single key, they use a Dictionary with values of type List{T}. This approach is very inefficient (in terms of memory use) if most keys are only associated with one or two values; this class solves the problem using a single sorted B+ tree for all keys and all values. It requires, however, that both the keys and values are totally ordered (i.e. are sortable).
By default, keys and values are sorted using Comparer{T}.Default. This will work provided that the keys and values both implement the IComparable{T} interface. If they don't, you can pass custom comparison functions to the constructor instead (one comparison function for keys, and a second one for values).
Since it is derived from BList{T}, this class enjoys the space efficiency of a B+ tree and capabilities of a AListBase{K,V}, although it tends to be slower than Dictionary{K,V}.
|
| BMultiMap (int maxLeafSize) |
|
| BMultiMap (int maxLeafSize, int maxInnerSize) |
|
| BMultiMap (Func< K, K, int > compareKeys) |
|
| BMultiMap (Func< K, K, int > compareKeys, Func< V, V, int > compareValues) |
|
| BMultiMap (Func< K, K, int > compareKeys, Func< V, V, int > compareValues, int maxLeafSize) |
|
| BMultiMap (Func< K, K, int > compareKeys, Func< V, V, int > compareValues, int maxLeafSize, int maxInnerSize) |
|
bool | AddIfUnique (K key, V value) |
| Adds a key-value pair if there is not already a pair that compares equal to the new one. More...
|
|
bool | ContainsKey (K key) |
| Finds out whether the specified key is present. More...
|
|
int | FirstIndexOf (K key) |
| Finds the lowest index of an item with the specified key. More...
|
|
bool | RemoveAny (K key) |
| Removes one pair from the collection that matches the specified key. More...
|
|
int | Remove (K key, int maxToRemove) |
| Removes up to a specified number of items from the collections that have the specified key. More...
|
|
int | RemoveAll (K key) |
| Removes all the items from the collection whose key compares equal to the specified key. More...
|
|
bool | TryGetValue (K key, out V value) |
| Finds a value associated with the specified key. More...
|
|
void | Add (K key, V value) |
|
int | FindLowerBound (K key) |
| Finds the lowest index of an item that is equal to or greater than the specified item. More...
|
|
int | FindLowerBound (K key, out bool found) |
|
int | FindLowerBound (K key, out V value, out bool found) |
|
int | FindLowerBound (ref K key, out V value, out bool found) |
|
int | FindUpperBound (K key) |
| Finds the index of the first item in the list whose key is greater than the specified key. More...
|
|
int | FindLowerBoundExact (ref K key, out V value, out bool found) |
| Does the same thing as IndexOfExact, but with the same set of arguments as FindLowerBound including the value associated with the matching key. More...
|
|
int | IndexOfExact (K key) |
| Specialized search function that finds the first index of an item whose key compares equal to the specified key, not only according to the comparison function for this collection, but also according to Object.Equals. This function works properly even if duplicate keys exist in addition that do NOT compare equal according to Object.Equals. More...
|
|
| BList () |
| Initializes an empty BList. More...
|
|
| BList (int maxLeafSize) |
|
| BList (int maxLeafSize, int maxInnerSize) |
|
| BList (Func< T, T, int > compareItems) |
|
| BList (Func< T, T, int > compareItems, int maxLeafSize) |
|
| BList (Func< T, T, int > compareItems, int maxLeafSize, int maxInnerSize) |
| Initializes an empty BList. More...
|
|
| BList (BList< T > items, bool keepListChangingHandlers) |
|
void | Add (T item) |
|
bool | Remove (T item) |
| Removes a single instance of the specified item. More...
|
|
int | RemoveAll (T item) |
| Removes all instances of the specified item. More...
|
|
int | Do (AListOperation mode, ref T item) |
| Adds, removes, or replaces an item in the list. More...
|
|
int | Do (AListOperation mode, T item) |
|
int | AddRange (IEnumerable< T > e) |
| Adds a set of items to the list, one at a time. More...
|
|
int | RemoveRange (IEnumerable< T > e) |
| Removes a set of items from the list, one at a time. More...
|
|
int | DoRange (AListOperation mode, IEnumerable< T > e) |
| Performs the same operation for each item in a series. Equivalent to calling Do(AListOperation,T) on each item. More...
|
|
BList< T > | Clone () |
|
BList< T > | Clone (bool keepListChangingHandlers) |
| Clones a BList. More...
|
|
BList< T > | CopySection (int start, int subcount) |
|
BList< T > | RemoveSection (int start, int count) |
|
int | IndexOf (T item) |
| Finds the lowest index of an item that is equal to or greater than the specified item. More...
|
|
bool | Contains (T item) |
| Returns true if the list contains the specified item, and false if not. More...
|
|
int | FindLowerBound (T item) |
| Finds the lowest index of an item that is equal to or greater than the specified item. More...
|
|
int | FindLowerBound (T item, out bool found) |
|
int | FindLowerBound (ref T item) |
|
int | FindLowerBound (ref T item, out bool found) |
|
int | FindUpperBound (T item) |
| Finds the index of the first item in the list that is greater than the specified item. More...
|
|
int | FindUpperBound (ref T item) |
|
int | IndexOfExact (T item) |
| Specialized search function that finds the index of an item that not only compares equal to the specified item according to the comparison function for this collection, but is also equal according to Object.Equals. This function works properly even if duplicate items exist in addition that do NOT compare equal according to Object.Equals. 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 () |
|
|
int | CompareKeyAndValue (KeyValuePair< K, V > a, KeyValuePair< K, V > b) |
|
int | CompareKeysOnly (KeyValuePair< K, V > a, KeyValuePair< K, V > b) |
|
int | UpperBoundCompare (KeyValuePair< K, V > candidate, KeyValuePair< K, V > searchKey) |
|
| BList (BList< T > original, AListNode< T, T > section) |
|
override AListNode< T, T > | NewRootLeaf () |
|
override AListInnerBase< T, T > | SplitRoot (AListNode< T, T > left, AListNode< T, T > right) |
|
| 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...
|
|