Enhanced C#
Language of your choice: library documentation

Documentation moved to ecsharp.net

GitHub doesn't support HTTP redirects, so you'll be redirected in 3 seconds.

 All Classes Namespaces Functions Variables Enumerations Enumerator Properties Events Pages
Properties | Public Member Functions | Protected Member Functions | List of all members
Loyc.Collections.Impl.ListSourceBase< T > Class Template Referenceabstract

A base class for read-only collections that wish to implement IList{T} and IListSource{T}. Provides default implementations for most of the methods. More...


Source file:
Inheritance diagram for Loyc.Collections.Impl.ListSourceBase< T >:
Loyc.Collections.Impl.ReadOnlyCollectionBase< T > Loyc.Collections.IListAndListSource< T > Loyc.Collections.IIsEmpty Loyc.Collections.ICollectionAndReadOnly< T > Loyc.Collections.IListSource< out T > Loyc.Collections.ICollectionAndReadOnly< T > Loyc.Collections.BufferedSequence< T > Loyc.Collections.Impl.ListExBase< T > Loyc.Collections.ListSourceAsSparse< T > Loyc.Collections.ReversedListSource< T >

Remarks

A base class for read-only collections that wish to implement IList{T} and IListSource{T}. Provides default implementations for most of the methods.

You only need to implement two methods yourself:

public abstract int Count { get; }
public abstract T TryGet(int index, out bool fail);

Properties

abstract override int Count [get]
 
bool IsEmpty [get]
 
this[int index] [get]
 
- Properties inherited from Loyc.Collections.Impl.ReadOnlyCollectionBase< T >
abstract int Count [get]
 
- Properties inherited from Loyc.Collections.IIsEmpty
bool IsEmpty [get]
 

Public Member Functions

abstract T TryGet (int index, out bool fail)
 Gets the item at the specified index, and does not throw an exception on failure. More...
 
int IndexOf (T item)
 
Slice_< T > Slice (int start, int count)
 Returns a sub-range of this list. More...
 
override IEnumerator< T > GetEnumerator ()
 
- Public Member Functions inherited from Loyc.Collections.Impl.ReadOnlyCollectionBase< T >
bool Contains (T item)
 

Protected Member Functions

int ThrowIndexOutOfRange (int index)
 

Member Function Documentation

Slice_<T> Loyc.Collections.Impl.ListSourceBase< T >.Slice ( int  start,
int  count 
)
inline

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:

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 >.

abstract T Loyc.Collections.Impl.ListSourceBase< T >.TryGet ( int  index,
out bool  fail 
)
pure virtual

Gets the item at the specified index, and does not throw an exception on failure.

Parameters
indexAn index in the range 0 to Count-1.
failA 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 >.

Implemented in Loyc.Collections.BufferedSequence< T >, Loyc.Collections.ReversedListSource< T >, and Loyc.Collections.ListSourceAsSparse< T >.