Table of Contents

Class TrackingList<T>

Namespace
Rinku.Tracking
Assembly
Rinku.dll

Tracks list membership, order, additions, and removals.

public class TrackingList<T> : IList<T>, ICollection<T>, IReadOnlyList<T>, IReadOnlyCollection<T>, IEnumerable<T>, IEnumerable

Type Parameters

T
Inheritance
TrackingList<T>
Implements
Derived
Inherited Members
Extension Methods

Constructors

TrackingList(IEnumerable<T>, int, IEqualityComparer<T>?, ITrackingListContext<T>?)

Creates a tracking list with baseline items.

public TrackingList(IEnumerable<T> items, int initialCapacity = 0, IEqualityComparer<T>? comparer = null, ITrackingListContext<T>? context = null)

Parameters

items IEnumerable<T>
initialCapacity int
comparer IEqualityComparer<T>
context ITrackingListContext<T>

TrackingList(int, IEqualityComparer<T>?, ITrackingListContext<T>?)

Creates an empty tracking list.

public TrackingList(int capacity = 0, IEqualityComparer<T>? comparer = null, ITrackingListContext<T>? context = null)

Parameters

capacity int
comparer IEqualityComparer<T>
context ITrackingListContext<T>

Properties

Added

Gets the active added items.

public TrackingList<T>.AddedCollection Added { get; }

Property Value

TrackingList<T>.AddedCollection

AddedCount

Gets the number of active added items.

public int AddedCount { get; }

Property Value

int

CanAddNew

Gets whether a new item can be created.

public bool CanAddNew { get; }

Property Value

bool

Capacity

Gets or sets the active item capacity.

public int Capacity { get; set; }

Property Value

int

Comparer

Gets the item comparer.

public IEqualityComparer<T> Comparer { get; }

Property Value

IEqualityComparer<T>

Context

Gets the confirmation context.

public ITrackingListContext<T> Context { get; }

Property Value

ITrackingListContext<T>

Count

Gets the number of elements contained in the ICollection<T>.

public int Count { get; }

Property Value

int

The number of elements contained in the ICollection<T>.

HasChanges

Gets whether structural changes exist.

public bool HasChanges { get; }

Property Value

bool

IsReadOnly

Gets a value indicating whether the ICollection<T> is read-only.

public bool IsReadOnly { get; }

Property Value

bool

true if the ICollection<T> is read-only; otherwise, false.

this[int]

Gets or sets the element at the specified index.

public virtual T this[int index] { get; set; }

Parameters

index int

The zero-based index of the element to get or set.

Property Value

T

The element at the specified index.

Exceptions

ArgumentOutOfRangeException

index is not a valid index in the IList<T>.

NotSupportedException

The property is set and the IList<T> is read-only.

Removed

Gets the removed items.

public TrackingList<T>.RemovedCollection Removed { get; }

Property Value

TrackingList<T>.RemovedCollection

RemovedCount

Gets the number of removed items.

public int RemovedCount { get; }

Property Value

int

RemovedSpan

Gets a span over the removed items.

public ReadOnlySpan<T> RemovedSpan { get; }

Property Value

ReadOnlySpan<T>

Methods

Add(T)

Adds an item to the ICollection<T>.

public virtual void Add(T item)

Parameters

item T

The object to add to the ICollection<T>.

Exceptions

NotSupportedException

The ICollection<T> is read-only.

AddNew()

Creates and adds a new item.

public virtual T AddNew()

Returns

T

AddTrackedItem(int, T)

Adds an item and returns a token for cancellation.

protected TrackingList<T>.AdditionToken AddTrackedItem(int index, T item)

Parameters

index int
item T

Returns

TrackingList<T>.AdditionToken

AsSpan()

Gets a span over the active items.

public ReadOnlySpan<T> AsSpan()

Returns

ReadOnlySpan<T>

Clear()

Removes all items from the ICollection<T>.

public virtual void Clear()

Exceptions

NotSupportedException

The ICollection<T> is read-only.

Confirm(T)

Confirms the active operation for an item.

public bool Confirm(T item)

Parameters

item T

Returns

bool

ConfirmAddedAt(int)

Confirms an addition and clears list-owned added state on success.

public bool ConfirmAddedAt(int index)

Parameters

index int

Returns

bool

ConfirmAt(int)

Confirms the row as Added or Edit according to its current structural state.

public bool ConfirmAt(int index)

Parameters

index int

Returns

bool

ConfirmChanges()

Confirms all observed operations independently.

public bool ConfirmChanges()

Returns

bool

ConfirmDelete(T)

Confirms deletion of a removed item.

public bool ConfirmDelete(T item)

Parameters

item T

Returns

bool

ConfirmDeleteAt(int)

Confirms deletion of a removed item.

public bool ConfirmDeleteAt(int removedIndex)

Parameters

removedIndex int

Returns

bool

ConfirmEditAt(int)

Confirms the item's edit independently of whether the row is structurally Added.

public bool ConfirmEditAt(int index)

Parameters

index int

Returns

bool

Contains(T)

Determines whether the ICollection<T> contains a specific value.

public bool Contains(T item)

Parameters

item T

The object to locate in the ICollection<T>.

Returns

bool

true if item is found in the ICollection<T>; otherwise, false.

CopyAddedTo(Span<T>)

Copies added items to a destination span.

public int CopyAddedTo(Span<T> destination)

Parameters

destination Span<T>

Returns

int

CopyTo(T[], int)

Copies the elements of the ICollection<T> to an Array, starting at a particular Array index.

public void CopyTo(T[] array, int arrayIndex)

Parameters

array T[]

The one-dimensional Array that is the destination of the elements copied from ICollection<T>. The Array must have zero-based indexing.

arrayIndex int

The zero-based index in array at which copying begins.

Exceptions

ArgumentNullException

array is null.

ArgumentOutOfRangeException

arrayIndex is less than 0.

ArgumentException

The number of elements in the source ICollection<T> is greater than the available space from arrayIndex to the end of the destination array.

EnsureCapacity(int)

Ensures capacity for active items.

public int EnsureCapacity(int capacity)

Parameters

capacity int

Returns

int

GetEnumerator()

Gets an active item enumerator.

public TrackingList<T>.Enumerator GetEnumerator()

Returns

TrackingList<T>.Enumerator

IndexOf(T)

Determines the index of a specific item in the IList<T>.

public int IndexOf(T item)

Parameters

item T

The object to locate in the IList<T>.

Returns

int

The index of item if found in the list; otherwise, -1.

Insert(int, T)

Inserts an item to the IList<T> at the specified index.

public virtual void Insert(int index, T item)

Parameters

index int

The zero-based index at which item should be inserted.

item T

The object to insert into the IList<T>.

Exceptions

ArgumentOutOfRangeException

index is not a valid index in the IList<T>.

NotSupportedException

The IList<T> is read-only.

IsAddedAt(int)

Returns whether the item at an index is added.

public bool IsAddedAt(int index)

Parameters

index int

Returns

bool

Move(int, int)

Moves an active item.

public void Move(int oldIndex, int newIndex)

Parameters

oldIndex int
newIndex int

OnChanged(TrackingListChange<T>)

Handles a structural change.

protected virtual void OnChanged(TrackingListChange<T> change)

Parameters

change TrackingListChange<T>

OnConfirmed(TrackingListConfirmationKind, int, T)

Handles a confirmed operation.

protected virtual void OnConfirmed(TrackingListConfirmationKind kind, int index, T item)

Parameters

kind TrackingListConfirmationKind
index int
item T

Remove(T)

Removes the first occurrence of a specific object from the ICollection<T>.

public virtual bool Remove(T item)

Parameters

item T

The object to remove from the ICollection<T>.

Returns

bool

true if item was successfully removed from the ICollection<T>; otherwise, false. This method also returns false if item is not found in the original ICollection<T>.

Exceptions

NotSupportedException

The ICollection<T> is read-only.

RemoveAt(int)

Removes the IList<T> item at the specified index.

public virtual void RemoveAt(int index)

Parameters

index int

The zero-based index of the item to remove.

Exceptions

ArgumentOutOfRangeException

index is not a valid index in the IList<T>.

NotSupportedException

The IList<T> is read-only.

Restore(T, int)

Restores a removed item.

public bool Restore(T item, int index = -1)

Parameters

item T
index int

Returns

bool

RestoreAt(int, int)

Restores an observed removal as baseline membership.

public T RestoreAt(int removedIndex, int index = -1)

Parameters

removedIndex int
index int

Returns

T

SetTrackedItem(int, T)

Replaces an item while tracking structural state.

protected void SetTrackedItem(int index, T item)

Parameters

index int
item T

TrimExcess()

Trims unused active and removed storage.

public void TrimExcess()