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.Repeated< T > Struct Template Reference

Helper struct. A sequence that stores one value, but acts like a list in which that value is repeated a specified number of times. Returned from ListExt.Repeat{T}(T, int). More...


Source file:
Inheritance diagram for Loyc.Collections.Repeated< T >:
Loyc.Collections.IListAndListSource< T > Loyc.Collections.IRange< out T > Loyc.Collections.IIsEmpty Loyc.Collections.IListAndReadOnly< T > Loyc.Collections.IListSource< out T > Loyc.Collections.ICollectionAndSource< T > Loyc.Collections.IBRange< out T > Loyc.Collections.IListSource< out T > Loyc.ICloneable< out T > Loyc.Collections.IIndexed< in K, out V > Loyc.Collections.ITryGet< in K, out V > Loyc.Collections.ISource< out T > Loyc.Collections.IHasLast< out T > Loyc.ICloneable< out T > Loyc.Collections.IFRange< out T > Loyc.Collections.ICollectionAndReadOnly< T > Loyc.Collections.ICollectionSource< T > Loyc.Collections.IIndexed< in K, out V > Loyc.Collections.ITryGet< in K, out V > Loyc.Collections.ISource< out T > Loyc.Collections.ICollectionAndReadOnly< T >

Remarks

Helper struct. A sequence that stores one value, but acts like a list in which that value is repeated a specified number of times. Returned from ListExt.Repeat{T}(T, int).

Public fields

int _count
 
_value
 

Properties

int Count [get]
 
this[int index] [get]
 
T IList< T >. this[int index] [get, set]
 
bool ICollection< T >. IsReadOnly [get]
 
bool IsEmpty [get]
 
Last [get]
 
First [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...
 
- Properties inherited from Loyc.Collections.IHasLast< out T >
Last [get]
 Gets the first item in the collection. More...
 

Public Member Functions

 Repeated (T value, int count)
 
TryGet (int index, out bool fail)
 
int IndexOf (T item)
 
IListSource< T > IListSource< T >. Slice (int start, int count)
 Returns a sub-range of this list. More...
 
Slice_< T > Slice (int start, int count)
 Returns a sub-range of this list. More...
 
void IList< T >. Insert (int index, T item)
 
void IList< T >. RemoveAt (int index)
 
void ICollection< T >. Add (T item)
 
void ICollection< T >. Clear ()
 
void ICollection< T >. CopyTo (T[] array, int arrayIndex)
 Copies the elements of the collection to an Array, starting at a particular array index. More...
 
void ICollectionSource< T >. CopyTo (T[] array, int arrayIndex)
 Copies the elements of the collection to an Array, starting at a particular array index. More...
 
bool ICollection< T >. Remove (T item)
 
bool Contains (T item)
 Returns true if and only if the collection contains the specified item. More...
 
System.Collections.IEnumerator
System.Collections.IEnumerable. 
GetEnumerator ()
 
IEnumerator< T > GetEnumerator ()
 
PopLast (out bool fail)
 Removes the last item from the range and returns it. More...
 
PopFirst (out bool fail)
 Removes the first 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 ()
 
Repeated< T > Clone ()
 
- 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...
 

Member Function Documentation

bool Loyc.Collections.Repeated< T >.Contains ( item)
inline

Returns true if and only if the collection contains the specified item.

Parameters
itemData/object whose presence you want to check for. The collection decides how to test for equality, but it's most common to use EqualityComparer{T}.Default.

Implements Loyc.Collections.IContains< in T >.

void ICollection<T>. Loyc.Collections.Repeated< T >.CopyTo ( T[]  array,
int  arrayIndex 
)
inline

Copies the elements of the collection to an Array, starting at a particular array index.

It's usually more convenient to call the ToArray() extension method, which calls this method for you.

This method exists for performance reasons (the collection itself can often copy data out faster than an enumerator can).

Exceptions
ArgumentNullExceptionarray is null.
ArgumentOutOfRangeExceptionarrayIndex is negative.
ArgumentExceptionThe number of elements in the source collection is greater than the available space from arrayIndex to the end of the destination array.

Implements Loyc.Collections.ICollectionSource< T >.

void ICollectionSource<T>. Loyc.Collections.Repeated< T >.CopyTo ( T[]  array,
int  arrayIndex 
)
inline

Copies the elements of the collection to an Array, starting at a particular array index.

It's usually more convenient to call the ToArray() extension method, which calls this method for you.

This method exists for performance reasons (the collection itself can often copy data out faster than an enumerator can).

Exceptions
ArgumentNullExceptionarray is null.
ArgumentOutOfRangeExceptionarrayIndex is negative.
ArgumentExceptionThe number of elements in the source collection is greater than the available space from arrayIndex to the end of the destination array.

Implements Loyc.Collections.ICollectionSource< T >.

T Loyc.Collections.Repeated< T >.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 >.

T Loyc.Collections.Repeated< T >.PopLast ( out bool  fail)
inline

Removes the last item from the range and returns it.

Parameters
failReceives the current value of IsEmpty.
Returns
The first item of the range, or default(T) if IsEmpty.

The remarks of IFRange{T}.PopFirst apply to this method.

Implements Loyc.Collections.IBRange< out T >.

IListSource<T> IListSource<T>. Loyc.Collections.Repeated< 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:

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

Slice_<T> Loyc.Collections.Repeated< 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:

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