Enhanced C#
Loyc library documentation
 All Classes Namespaces Functions Variables Enumerations Enumerator Properties Events Pages
Public fields | Properties | Public Member Functions | List of all members
Loyc.Collections.SparseListSourceSlice< T, TList > Struct Template Reference

Source file:
Inheritance diagram for Loyc.Collections.SparseListSourceSlice< T, TList >:
Loyc.Collections.ISparseListSource< T > Loyc.Collections.IFRange< out T > Loyc.ICloneable< out T > Loyc.Collections.IListSource< out T > Loyc.ICloneable< out T > Loyc.Collections.IHasFirst< out T > Loyc.Collections.IIsEmpty Loyc.Collections.ISource< out T > Loyc.Collections.ITryGet< in K, out V > Loyc.Collections.IIndexed< in K, out V > Loyc.Collections.IIsEmpty Loyc.Collections.ICount Loyc.Collections.IIsEmpty

Public fields

TList _list
 
int _start
 
int _count
 
int Count => _count
 
bool IsEmpty => _count == 0
 
First => this[0]
 

Properties

this[int index] [get]
 
this[int index, T defaultValue] [get]
 
- 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.IIsEmpty
bool IsEmpty [get]
 
- Properties inherited from Loyc.Collections.IIndexed< in K, out V >
this[K key] [get]
 Gets the value associated with the specified key. More...
 
- Properties inherited from Loyc.Collections.IHasFirst< out T >
First [get]
 Gets the first item in the deque. More...
 

Public Member Functions

 SparseListSourceSlice (TList list, int start, int count=int.MaxValue)
 Initializes a slice. More...
 
PopFirst (out bool empty)
 Removes the first item from the range and returns it. More...
 
SparseListSourceSlice< T,
TList > ICloneable
< SparseListSourceSlice< T,
TList > >. 
Clone ()
 
IFRange< T > ICloneable
< IFRange< T > >. 
Clone ()
 
IEnumerator< T > IEnumerable< T >. GetEnumerator ()
 
System.Collections.IEnumerator
System.Collections.IEnumerable. 
GetEnumerator ()
 
RangeEnumerator
< SparseListSourceSlice< T,
TList >, T > 
GetEnumerator ()
 
TryGet (int index, out bool fail)
 
IListSource< T > IListSource< T >. Slice (int start, int count)
 Returns a sub-range of this list.
Parameters
startThe new range will start at this index in the current list (this location will be index [0] in the new range).
countThe 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
ArgumentExceptionThe 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:

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); }

 
ISparseListSource< T >
ISparseListSource< T >. 
Slice (int start, int count)
 Returns a sub-range of this list.
Parameters
startThe new range will start at this index in the current list (this location will be index [0] in the new range).
countThe 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
ArgumentExceptionThe 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:

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); }

 
SparseListSourceSlice< T, TList > Slice (int start, int count=int.MaxValue)
 Returns a sub-range of this list.
Parameters
startThe new range will start at this index in the current list (this location will be index [0] in the new range).
countThe 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
ArgumentExceptionThe 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:

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); }

 
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...
 
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...
 
bool IsSet (int index)
 Determines whether a value exists at the specified index. More...
 
IEnumerator< KeyValuePair< int,
T > > 
GetItemEnumerator ()
 
- Public Member Functions inherited from Loyc.Collections.ITryGet< in K, out 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...
 

Constructor & Destructor Documentation

Loyc.Collections.SparseListSourceSlice< T, TList >.SparseListSourceSlice ( TList  list,
int  start,
int  count = int.MaxValue 
)
inline

Initializes a slice.

Exceptions
ArgumentExceptionThe start index was below zero.

The (start, count) range is allowed to be invalid, as long as 'start' and 'count' are zero or above.

  • 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 list.Count - start.

Member Function Documentation

bool Loyc.Collections.SparseListSourceSlice< T, TList >.IsSet ( int  index)

Determines whether a value exists at the specified index.

Parameters
index
Returns
true if a value is assigned at the specified index, or false if index is part of an empty space, or is outside the range of indexes that exist.

Implements Loyc.Collections.ISparseListSource< T >.

T Loyc.Collections.SparseListSourceSlice< T, TList >.NextHigherItem ( ref int?  index)
inline

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.

Parameters
indexThis parameter is increased by at least one, and perhaps more than one so that it refers to an index where there is a value. If index is null upon entering this method, the first non-empty space in the list is found. If there are no values at higher indexes, if the list is empty or if index + 1 >= Count, index is null when the method returns.

This method must skip over all indexes i for which IsSet(i) returns false, and return the next index for which IsSet(i) returns true. This method must accept any integer as input, including invalid indexes.

Implements Loyc.Collections.ISparseListSource< T >.

T Loyc.Collections.SparseListSourceSlice< T, TList >.NextLowerItem ( ref int?  index)
inline

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.

Parameters
indexThis parameter is increased by at least one, and perhaps more than one so that it refers to an index where there is a value. If index is null upon entering this method, the last non-empty space in the list is found. If there are no values at lower indexes, if the list is empty or if index is 0 or less, index is null when the method returns.

This method must skip over all indexes i for which IsSet(i) returns false, and return the next index for which IsSet(i) returns true. This method must accept any integer as input, including invalid indexes.

Implements Loyc.Collections.ISparseListSource< T >.

T Loyc.Collections.SparseListSourceSlice< T, TList >.PopFirst ( out bool  fail)
inline

Removes the first item from the range and returns it.

Parameters
failReceives the current value of IIsEmpty.IsEmpty.
Returns
The first item of the range, or default(T) if 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 >.