|
Enhanced C#
Loyc library documentation
|
Adapter: a random-access range for a slice of an IListSource{T}. More...
Adapter: a random-access range for a slice of an IListSource{T}.
| T | Item type in the list |
This type was supposed to be called simply Slice, but this was not allowed because in plain C#, "CS0542: member names cannot be the same as
their enclosing type" and of course, this type contains the Slice() method from IListSource.
Public fields | |
| IListSource< T > | _list |
| int | _start |
| int | _count |
Public static fields | |
| static readonly Slice_< T > | Empty = new Slice_<T>() |
Properties | |
| int | Count [get] |
| bool | IsEmpty [get] |
| T | First [get] |
| T | Last [get] |
| T | this[int index] [get] |
| T | this[int index, T defaultValue] [get] |
Properties inherited from Loyc.Collections.IHasFirst< out T > | |
| T | First [get] |
| Gets the first item in the deque. More... | |
Properties inherited from Loyc.Collections.IIsEmpty | |
| bool | IsEmpty [get] |
Properties inherited from Loyc.Collections.IHasLast< out T > | |
| T | Last [get] |
| Gets the first item in the collection. More... | |
Properties inherited from Loyc.Collections.ISource< out T > | |
| new int | Count [get] |
| Gets the number of items in the collection. More... | |
Properties inherited from Loyc.Collections.ICount | |
| int | Count [get] |
| Gets the number of items in the collection. More... | |
Properties inherited from Loyc.Collections.IIndexed< in K, out V > | |
| V | this[K key] [get] |
| Gets the value associated with the specified key. More... | |
Public Member Functions | |
| Slice_ (IListSource< T > list, int start, int count=int.MaxValue) | |
| Initializes a slice. More... | |
| Slice_ (IListSource< T > list) | |
| T | PopFirst (out bool empty) |
| Removes the first item from the range and returns it. More... | |
| T | PopLast (out bool empty) |
| Removes the last item from the range and returns it. More... | |
|
IFRange< T > ICloneable < IFRange< T > >. | Clone () |
|
IBRange< T > ICloneable < IBRange< T > >. | Clone () |
|
IRange< T > ICloneable< IRange < T > >. | Clone () |
| Slice_< T > | Clone () |
| IEnumerator< T > IEnumerable< T >. | GetEnumerator () |
|
System.Collections.IEnumerator System.Collections.IEnumerable. | GetEnumerator () |
| RangeEnumerator< Slice_< T >, T > | GetEnumerator () |
| T | TryGet (int index, out bool fail) |
| IListSource< T > IListSource< T >. | Slice (int start, int count) |
| Returns a sub-range of this list. More... | |
| Slice_< T > | Slice (int start, int count=int.MaxValue) |
| Returns a sub-range of this list. More... | |
Public Member Functions inherited from Loyc.Collections.ITryGet< in K, out V > | |
| V | TryGet (K key, out bool fail) |
| Gets the item for the specified key or index, and does not throw an exception on failure. More... | |
|
inline |
Initializes a slice.
| ArgumentException | The start index was below zero. |
The (start, count) range is allowed to be invalid, as long as 'start' and 'count' are zero or above.
list.Count - start.
|
inline |
Removes the first item from the range and returns it.
| fail | Receives the current value of IIsEmpty.IsEmpty. |
This method is a little unweildy in plain C#, but in EC# it will be a bit more convenient to use via extension methods like T PopFirst(ref this Range range, T defaultValue) and T? PopFirst(ref this Range range), which are illegal in plain C#.
I wanted to give this method the signature "bool PopFirst(out T first)" but the generic parameter "T" is covariant, i.e. it is marked "out T" which, ironically, is not compatible with "out T" parameters, only with return values.
Implements Loyc.Collections.IFRange< out T >.
|
inline |
Removes the last item from the range and returns it.
| fail | Receives the current value of IsEmpty. |
The remarks of IFRange{T}.PopFirst apply to this method.
Implements Loyc.Collections.IBRange< out T >.
|
inline |
Returns a sub-range of this list.
| 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. |
| ArgumentException | The start index was below zero. |
The (start, count) range is allowed to be invalid, as long as start is zero or above.
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:
IListSource<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 >.
References Loyc.Collections.Slice_< T >.Slice().
Referenced by Loyc.Collections.Slice_< T >.Slice().
|
inline |
Returns a sub-range of this list.
| 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. |
| ArgumentException | The start index was below zero. |
The (start, count) range is allowed to be invalid, as long as start is zero or above.
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:
IListSource<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 >.
1.8.7