Shared base class of FWList and WList.
- Template Parameters
-
T | The type of elements in the list |
|
virtual int | AdjustWListIndex (int index, int size) |
| This method implements the difference between FWList and WList: In FWList it returns index , but in WList it returns Count-size-index . More...
|
|
| WListProtected (WListProtected< T > original, bool takeOwnership) |
|
T | GetAt (int index) |
| Gets an item from a FWList or WList at the specified index. More...
|
|
void | SetAt (int index, T value) |
| Sets an item in a FWList or WList at the specified index. More...
|
|
void | Add (T item) |
| Inserts an item at the "front" of the list, which is index 0 for FWList, or Count for WList. More...
|
|
void | Insert (int index, T item) |
|
void | RemoveAt (int index) |
|
int | IndexOf (T item) |
| Searches for the specified object and returns the zero-based index of the first occurrence (lowest index) within the entire FVList. More...
|
|
bool | Contains (T item) |
|
void | CopyTo (T[] array, int arrayIndex) |
|
bool | Remove (T item) |
|
virtual IEnumerator< T > | GetIEnumerator () |
|
FVList< T >.Enumerator | GetVListEnumerator () |
|
VList< T >.Enumerator | GetRVListEnumerator () |
|
void | AddRange (IEnumerator< T > items) |
|
void | RemoveAtDff (int distanceFromFront) |
|
void | RemoveRangeBase (int distanceFromFront, int count) |
|
void | AddRangeBase (IList< T > items, bool isRWList) |
|
void | InsertRangeAtDff (int distanceFromFront, IList< T > items, bool isRWList) |
|
void | InsertAtDff (int distanceFromFront, T item) |
|
T | GetAtDff (int distanceFromFront) |
| Gets an item WITHOUT doing a range check More...
|
|
void | SetAtDff (int distanceFromFront, T item) |
| Sets an item WITHOUT doing a range or mutability check More...
|
|
FVList< T > | ToFVList () |
| Returns this list as a FVList; if this is a WList, the order of the elements is reversed at the same time. More...
|
|
VList< T > | ToVList () |
| Returns this list as a VList; if this is a FWList, the order of the elements is reversed at the same time. More...
|
|
Slice_<T> Loyc.Collections.WListBase< T >.Slice |
( |
int |
start, |
|
|
int |
count |
|
) |
| |
|
inline |
Returns a sub-range of this list.
- Parameters
-
start | The new range will start at this index in the current list (this location will be index [0] in the new range). |
count | The desired number of elements in the new range, or int.MaxValue to get all elements until the end of the list. |
- Returns
- Returns a sub-range of this range.
- Exceptions
-
ArgumentException | The start index was below zero. |
The (start, count) range is allowed to be invalid, as long as start is zero or above.
-
If count is below zero, or if start is above the original Count, the Count of the new slice is set to zero.
-
if (start + count) is above the original Count, the Count of the new slice is reduced to
this.Count - start
. Implementation note: do not compute (start + count) because it may overflow. Instead, test whether (count > this.Count - start).
Most collections should use the following implementation:
IRange<T> IListSource<T>.Slice(int start, int count) { return Slice(start, count); }
public Slice_<T> Slice(int start, int count) { return new Slice_<T>(this, start, count); }
Implements Loyc.Collections.IListSource< out T >.
T Loyc.Collections.WListBase< T >.TryGet |
( |
int |
index, |
|
|
out bool |
fail |
|
) |
| |
|
inline |
Gets the item at the specified index, and does not throw an exception on failure.
- Parameters
-
index | An index in the range 0 to Count-1. |
fail | A flag that is set on failure. |
- Returns
- The element at the specified index, or default(T) if the index is not valid.
In my original design, the caller could provide a value to return on failure, but this would not allow T to be marked as "out" in C# 4. For the same reason, we cannot have a ref/out T parameter. Instead, the following extension methods are provided:
bool TryGet(
int index, ref T value);
T
TryGet(
int, T defaultValue);
Implements Loyc.Collections.IListSource< out T >.