Table of Contents

Class MemoizingMRUCache<TParam, TVal>

Namespace
Splat
Assembly
Splat.dll

This data structure is a representation of a memoizing cache - i.e. a class that will evaluate a function, but keep a cache of recently evaluated parameters.

Since this is a memoizing cache, it is important that this function be a "pure" function in the mathematical sense - that a key *always* maps to a corresponding return value.

public sealed class MemoizingMRUCache<TParam, TVal> where TParam : notnull

Type Parameters

TParam

The type of the parameter to the calculation function.

TVal

The type of the value returned by the calculation function.

Inheritance
MemoizingMRUCache<TParam, TVal>
Extension Methods
WhenAnyMixin.WhenAny<TSender, TRet, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(TSender?, Expression<Func<TSender, T1>>, Expression<Func<TSender, T2>>, Expression<Func<TSender, T3>>, Expression<Func<TSender, T4>>, Expression<Func<TSender, T5>>, Expression<Func<TSender, T6>>, Expression<Func<TSender, T7>>, Expression<Func<TSender, T8>>, Expression<Func<TSender, T9>>, Expression<Func<TSender, T10>>, Expression<Func<TSender, T11>>, Expression<Func<TSender, T12>>, Func<IObservedChange<TSender, T1>, IObservedChange<TSender, T2>, IObservedChange<TSender, T3>, IObservedChange<TSender, T4>, IObservedChange<TSender, T5>, IObservedChange<TSender, T6>, IObservedChange<TSender, T7>, IObservedChange<TSender, T8>, IObservedChange<TSender, T9>, IObservedChange<TSender, T10>, IObservedChange<TSender, T11>, IObservedChange<TSender, T12>, TRet>)
WhenAnyMixin.WhenAny<TSender, TRet, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(TSender?, Expression<Func<TSender, T1>>, Expression<Func<TSender, T2>>, Expression<Func<TSender, T3>>, Expression<Func<TSender, T4>>, Expression<Func<TSender, T5>>, Expression<Func<TSender, T6>>, Expression<Func<TSender, T7>>, Expression<Func<TSender, T8>>, Expression<Func<TSender, T9>>, Expression<Func<TSender, T10>>, Expression<Func<TSender, T11>>, Expression<Func<TSender, T12>>, Func<IObservedChange<TSender, T1>, IObservedChange<TSender, T2>, IObservedChange<TSender, T3>, IObservedChange<TSender, T4>, IObservedChange<TSender, T5>, IObservedChange<TSender, T6>, IObservedChange<TSender, T7>, IObservedChange<TSender, T8>, IObservedChange<TSender, T9>, IObservedChange<TSender, T10>, IObservedChange<TSender, T11>, IObservedChange<TSender, T12>, TRet>)
WhenAnyMixin.WhenAny<TSender, TRet, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(TSender?, Expression<Func<TSender, T1>>, Expression<Func<TSender, T2>>, Expression<Func<TSender, T3>>, Expression<Func<TSender, T4>>, Expression<Func<TSender, T5>>, Expression<Func<TSender, T6>>, Expression<Func<TSender, T7>>, Expression<Func<TSender, T8>>, Expression<Func<TSender, T9>>, Expression<Func<TSender, T10>>, Expression<Func<TSender, T11>>, Expression<Func<TSender, T12>>, Func<IObservedChange<TSender, T1>, IObservedChange<TSender, T2>, IObservedChange<TSender, T3>, IObservedChange<TSender, T4>, IObservedChange<TSender, T5>, IObservedChange<TSender, T6>, IObservedChange<TSender, T7>, IObservedChange<TSender, T8>, IObservedChange<TSender, T9>, IObservedChange<TSender, T10>, IObservedChange<TSender, T11>, IObservedChange<TSender, T12>, TRet>)
WhenAnyMixin.WhenAny<TSender, TRet, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(TSender?, Expression<Func<TSender, T1>>, Expression<Func<TSender, T2>>, Expression<Func<TSender, T3>>, Expression<Func<TSender, T4>>, Expression<Func<TSender, T5>>, Expression<Func<TSender, T6>>, Expression<Func<TSender, T7>>, Expression<Func<TSender, T8>>, Expression<Func<TSender, T9>>, Expression<Func<TSender, T10>>, Expression<Func<TSender, T11>>, Expression<Func<TSender, T12>>, Func<IObservedChange<TSender, T1>, IObservedChange<TSender, T2>, IObservedChange<TSender, T3>, IObservedChange<TSender, T4>, IObservedChange<TSender, T5>, IObservedChange<TSender, T6>, IObservedChange<TSender, T7>, IObservedChange<TSender, T8>, IObservedChange<TSender, T9>, IObservedChange<TSender, T10>, IObservedChange<TSender, T11>, IObservedChange<TSender, T12>, TRet>)

Constructors

MemoizingMRUCache(Func<TParam, object?, TVal>, int)

Initializes a new instance of the MemoizingMRUCache<TParam, TVal> class.

public MemoizingMRUCache(Func<TParam, object?, TVal> calculationFunc, int maxSize)

Parameters

calculationFunc Func<TParam, object, TVal>

The function whose results you want to cache, which is provided the key value, and an Tag object that is user-defined.

maxSize int

The size of the cache to maintain, after which old items will start to be thrown out.

MemoizingMRUCache(Func<TParam, object?, TVal>, int, Action<TVal>)

Initializes a new instance of the MemoizingMRUCache<TParam, TVal> class.

public MemoizingMRUCache(Func<TParam, object?, TVal> calculationFunc, int maxSize, Action<TVal> onRelease)

Parameters

calculationFunc Func<TParam, object, TVal>

The function whose results you want to cache, which is provided the key value, and an Tag object that is user-defined.

maxSize int

The size of the cache to maintain, after which old items will start to be thrown out.

onRelease Action<TVal>

A function to call when a result gets evicted from the cache (i.e. because Invalidate was called or the cache is full).

MemoizingMRUCache(Func<TParam, object?, TVal>, int, Action<TVal>?, IEqualityComparer<TParam>)

Initializes a new instance of the MemoizingMRUCache<TParam, TVal> class.

public MemoizingMRUCache(Func<TParam, object?, TVal> calculationFunc, int maxSize, Action<TVal>? onRelease, IEqualityComparer<TParam> paramComparer)

Parameters

calculationFunc Func<TParam, object, TVal>

The function whose results you want to cache, which is provided the key value, and an Tag object that is user-defined.

maxSize int

The size of the cache to maintain, after which old items will start to be thrown out.

onRelease Action<TVal>

A function to call when a result gets evicted from the cache (i.e. because Invalidate was called or the cache is full).

paramComparer IEqualityComparer<TParam>

A comparer for the parameter.

MemoizingMRUCache(Func<TParam, object?, TVal>, int, IEqualityComparer<TParam>)

Initializes a new instance of the MemoizingMRUCache<TParam, TVal> class.

public MemoizingMRUCache(Func<TParam, object?, TVal> calculationFunc, int maxSize, IEqualityComparer<TParam> paramComparer)

Parameters

calculationFunc Func<TParam, object, TVal>

The function whose results you want to cache, which is provided the key value, and an Tag object that is user-defined.

maxSize int

The size of the cache to maintain, after which old items will start to be thrown out.

paramComparer IEqualityComparer<TParam>

A comparer for the parameter.

Methods

CachedValues()

Returns all values currently in the cache.

public IEnumerable<TVal> CachedValues()

Returns

IEnumerable<TVal>

The values in the cache.

Get(TParam)

Gets the value from the specified key.

public TVal Get(TParam key)

Parameters

key TParam

The value to pass to the calculation function.

Returns

TVal

The value that we have got.

Get(TParam, object?)

Evaluates the function provided, returning the cached value if possible.

public TVal Get(TParam key, object? context = null)

Parameters

key TParam

The value to pass to the calculation function.

context object

An additional optional user-specific parameter.

Returns

TVal

The value that we have got.

Invalidate(TParam)

Ensure that the next time this key is queried, the calculation function will be called.

public void Invalidate(TParam key)

Parameters

key TParam

The key to invalidate the value for.

InvalidateAll(bool)

Invalidate all the items in the cache.

public void InvalidateAll(bool aggregateReleaseExceptions = false)

Parameters

aggregateReleaseExceptions bool

Flag to indicate whether Exceptions during the resource Release call should not fail on the first item. But should try all items then throw an aggregate exception.

TryGet(TParam, out TVal?)

Tries to get the value if it's available.

public bool TryGet(TParam key, out TVal? result)

Parameters

key TParam

The input value of the key to use.

result TVal

The result if available, otherwise it will be the default value.

Returns

bool

If we were able to retrieve the value or not.