Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion BitFaster.Caching/Lru/Builder/AsyncConcurrentLruBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ internal AsyncConcurrentLruBuilder(LruInfo<K> info)
///<inheritdoc/>
public override IAsyncCache<K, V> Build()
{
return LruFactory<K, V>.CreateConcurrent(this.info) as IAsyncCache<K, V>;
return ConcurrentLru.Create<K, V>(this.info) as IAsyncCache<K, V>;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
using System.Linq.Expressions;

using BitFaster.Caching.Lru.Builder;

namespace BitFaster.Caching.Lru
{
/// <summary>
/// Factory class for creating ConcurrentLru variants.
/// </summary>
internal static class LruFactory<K, V>
internal static class ConcurrentLru
{
/// <summary>
/// Creates a ConcurrentLru instance based on the provided LruInfo.
/// </summary>
/// <param name="info">The LruInfo</param>
/// <returns>A ConcurrentLru</returns>
internal static ICache<K, V> CreateConcurrent(LruInfo<K> info)
internal static ICache<K, V> Create<K, V>(LruInfo<K> info)
{
if (info.TimeToExpireAfterWrite.HasValue && info.TimeToExpireAfterAccess.HasValue)
Throw.InvalidOp("Specifying both ExpireAfterWrite and ExpireAfterAccess is not supported.");
Expand All @@ -23,13 +23,13 @@ internal static ICache<K, V> CreateConcurrent(LruInfo<K> info)
(true, false, false) => new ConcurrentLru<K, V>(info.ConcurrencyLevel, info.Capacity, info.KeyComparer),
(true, true, false) => new ConcurrentTLru<K, V>(info.ConcurrencyLevel, info.Capacity, info.KeyComparer, info.TimeToExpireAfterWrite.Value),
(false, true, false) => new FastConcurrentTLru<K, V>(info.ConcurrencyLevel, info.Capacity, info.KeyComparer, info.TimeToExpireAfterWrite.Value),
(true, false, true) => CreateExpireAfterAccess<TelemetryPolicy<K, V>>(info),
(false, false, true) => CreateExpireAfterAccess<NoTelemetryPolicy<K, V>>(info),
(true, false, true) => CreateExpireAfterAccess<K, V, TelemetryPolicy<K, V>>(info),
(false, false, true) => CreateExpireAfterAccess<K, V, NoTelemetryPolicy<K, V>>(info),
_ => new FastConcurrentLru<K, V>(info.ConcurrencyLevel, info.Capacity, info.KeyComparer),
};
}

private static ICache<K, V> CreateExpireAfterAccess<TP>(LruInfo<K> info) where TP : struct, ITelemetryPolicy<K, V>
private static ICache<K, V> CreateExpireAfterAccess<K, V, TP>(LruInfo<K> info) where TP : struct, ITelemetryPolicy<K, V>
{
return new ConcurrentLruCore<K, V, LongTickCountLruItem<K, V>, AfterAccessLongTicksPolicy<K, V>, TP>(
info.ConcurrencyLevel, info.Capacity, info.KeyComparer, new AfterAccessLongTicksPolicy<K, V>(info.TimeToExpireAfterAccess.Value), default);
Expand Down
2 changes: 1 addition & 1 deletion BitFaster.Caching/Lru/ConcurrentLruBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ internal ConcurrentLruBuilder(LruInfo<K> info)
///<inheritdoc/>
public override ICache<K, V> Build()
{
return LruFactory<K, V>.CreateConcurrent(this.info);
return ConcurrentLru.Create<K, V>(this.info);
}
}
}