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 | Static Public Member Functions | Protected Member Functions | List of all members
Loyc.Collections.FWList< T > Class Template Reference

FWList is the mutable variant of the FVList data structure. More...


Source file:
Inheritance diagram for Loyc.Collections.FWList< T >:
Loyc.Collections.WListBase< T > Loyc.Collections.IListAndListSource< T > Loyc.ICloneable< out T > Loyc.Collections.WListProtected< T > Loyc.Collections.IListAndListSource< T > Loyc.Collections.IListSource< out T > Loyc.Collections.ICollectionAndReadOnly< T > Loyc.Collections.IListSource< out T > Loyc.Collections.ICollectionAndReadOnly< T >

Remarks

FWList is the mutable variant of the FVList data structure.

An article is available online about the VList data types.

See the remarks of VListBlock{T} for more information about VLists and WLists. It is most efficient to add items to the front of a FWList (at index 0) or the back of an WList (at index Count-1).

Properties

new T this[int index] [get, set]
 
this[int index, T defaultValue] [get]
 Gets an item from the list at the specified index; returns defaultValue if the index is not valid. More...
 
Front [get]
 Returns the front item of the list (at index 0). More...
 
bool IsEmpty [get]
 
- Properties inherited from Loyc.Collections.WListBase< T >
this[int index] [get, set]
 
new int Count [get]
 
bool IsReadOnly [get]
 
new int BlockChainLength [get]
 
- Properties inherited from Loyc.Collections.WListProtected< T >
byte UserByte [get, set]
 An additional byte that the derived class can optionally use. More...
 
int BlockChainLength [get]
 Gets the number of blocks used by this list. More...
 

Public Member Functions

 FWList (int initialSize)
 
 FWList (T itemZero, T itemOne)
 
 FWList (IList< T > list)
 
void AddRange (IList< T > list)
 
void InsertRange (int index, IList< T > list)
 
void RemoveRange (int index, int count)
 
new void Insert (int index, T item)
 
new void RemoveAt (int index)
 
new FVList< T >.Enumerator GetEnumerator ()
 
VList< T >.Enumerator ReverseEnumerator ()
 
new T TryGet (int index, out bool fail)
 Gets the item at the specified index, and does not throw an exception on failure. More...
 
FWList< T > Clone ()
 
FWList< T > Where (Predicate< T > keep)
 Applies a filter to a list, to exclude zero or more items. More...
 
FWList< T > WhereSelect (Func< T, Maybe< T >> filter)
 Filters and maps a list with a user-defined function. More...
 
FWList< T > SmartSelect (Func< T, T > map)
 Maps a list to another list of the same length. More...
 
FWList< Out > Select< Out > (Func< T, Out > map)
 Maps a list to another list of the same length. More...
 
FWList< T > Transform (VListTransformer< T > x)
 Transforms a list (combines filtering with selection and more). More...
 
Pop ()
 Removes the front item (at index 0) from the list and returns it. More...
 
FVList< T > WithoutFirst (int numToRemove)
 
WList< T > ToWList ()
 Returns this list as an WList, which effectively reverses the order of the elements. More...
 
T[] ToArray ()
 Returns the FWList converted to an array. More...
 
- Public Member Functions inherited from Loyc.Collections.WListBase< T >
new void Add (T item)
 
new void Clear ()
 
new void Insert (int index, T item)
 
new void RemoveAt (int index)
 
new int IndexOf (T item)
 
new bool Contains (T item)
 
new void CopyTo (T[] array, int arrayIndex)
 
new bool Remove (T item)
 
IEnumerator< T > GetEnumerator ()
 
TryGet (int index, out bool fail)
 Gets the item at the specified index, and does not throw an exception on failure. More...
 
Slice_< T > Slice (int start, int count)
 Returns a sub-range of this list. More...
 
void Push (T item)
 Synonym for Add(); adds an item to the front of the list. More...
 
new FVList< T > ToFVList ()
 
new VList< T > ToVList ()
 

Static Public Member Functions

static operator WList< T > (FWList< T > list)
 Returns this list as an WList, which effectively reverses the order of the elements. More...
 
- Static Public Member Functions inherited from Loyc.Collections.WListBase< T >
static operator FVList< T > (WListBase< T > list)
 Returns this list as a FVList; if this is a WList, the order of the elements is reversed at the same time. More...
 
static operator VList< T > (WListBase< T > list)
 Returns this list as a VList; if this is a FWList, the order of the elements is reversed at the same time. More...
 

Protected Member Functions

override 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...
 
override IEnumerator< T > GetIEnumerator ()
 
- Protected Member Functions inherited from Loyc.Collections.WListProtected< T >
 WListProtected (WListProtected< T > original, bool takeOwnership)
 
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)
 
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)
 
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...
 

Member Function Documentation

override int Loyc.Collections.FWList< T >.AdjustWListIndex ( int  index,
int  size 
)
inlineprotectedvirtual

This method implements the difference between FWList and WList: In FWList it returns index, but in WList it returns Count-size-index.

Parameters
indexIndex to adjust
sizeNumber of elements being accessed or removed

Solely as an optimization, FWList and WList also have separate versions of this[], InsertAt and RemoveAt.

Reimplemented from Loyc.Collections.WListProtected< T >.

static Loyc.Collections.FWList< T >.operator WList< T > ( FWList< T >  list)
inlineexplicitstatic

Returns this list as an WList, which effectively reverses the order of the elements.

This operation marks the items of the list as immutable. You can modify either list afterward, but some or all of the list may have to be copied.

T Loyc.Collections.FWList< T >.Pop ( )
inline

Removes the front item (at index 0) from the list and returns it.

FWList<Out> Loyc.Collections.FWList< T >.Select< Out > ( Func< T, Out >  map)
inline

Maps a list to another list of the same length.

Parameters
mapA function that transforms each item in the list.
Returns
The list after the map function is applied to each item. The original VList structure is not modified.
FWList<T> Loyc.Collections.FWList< T >.SmartSelect ( Func< T, T >  map)
inline

Maps a list to another list of the same length.

Parameters
mapA function that transforms each item in the list.
Returns
The list after the map function is applied to each item. The original VList structure is not modified.

This method is called "Smart" because of what happens if the map doesn't do anything. If the map function returns the first N items unmodified (the items at the tail of the FWList), those N items are typically not copied, but shared between the existing list and the new one.

T [] Loyc.Collections.FWList< T >.ToArray ( )
inline

Returns the FWList converted to an array.

WList<T> Loyc.Collections.FWList< T >.ToWList ( )
inline

Returns this list as an WList, which effectively reverses the order of the elements.

This operation marks the items of the list as immutable. You can modify either list afterward, but some or all of the list may have to be copied.

FWList<T> Loyc.Collections.FWList< T >.Transform ( VListTransformer< T >  x)
inline

Transforms a list (combines filtering with selection and more).

Parameters
xMethod to apply to each item in the list
Returns
A list formed from transforming all items in the list

See the documentation of FVList.Transform() for more information.

new T Loyc.Collections.FWList< T >.TryGet ( int  index,
out bool  fail 
)
inline

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

FWList<T> Loyc.Collections.FWList< T >.Where ( Predicate< T >  keep)
inline

Applies a filter to a list, to exclude zero or more items.

Parameters
keepA function that chooses which items to include (exclude items by returning false).
Returns
The list after filtering has been applied. The original VList structure is not modified.

If the predicate keeps the first N items it is passed (which are the last or "tail" items in a FWList), those N items are typically not copied, but shared between the existing list and the new one.

FWList<T> Loyc.Collections.FWList< T >.WhereSelect ( Func< T, Maybe< T >>  filter)
inline

Filters and maps a list with a user-defined function.

Parameters
filterA function that chooses which items to include in a new list, and what to change them to.
Returns
The list after filtering has been applied. The original list structure is not modified.

This is a smart function. If the filter does not modify the first N items it is passed (which are the last items in a FWList), those N items are typically not copied, but shared between the existing list and the new one.

Property Documentation

T Loyc.Collections.FWList< T >.Front
get

Returns the front item of the list (at index 0).

T Loyc.Collections.FWList< T >.this[int index, T defaultValue]
get

Gets an item from the list at the specified index; returns defaultValue if the index is not valid.