Cosmos/source/Cosmos.Debug.Common/CacheHelper.cs
2015-07-20 14:35:59 +02:00

37 lines
955 B
C#

using System;
using System.Linq;
using System.Threading.Tasks;
namespace Cosmos.Debug.Common
{
public class CacheHelper<TKey, TValue>
where TKey: IEquatable<TKey>
{
public CacheHelper(Func<TKey, TValue> getValueFunc)
{
if (getValueFunc == null)
{
throw new ArgumentNullException("getValueFunc");
}
mGetValueFunc = getValueFunc;
}
private readonly Func<TKey, TValue> mGetValueFunc;
private TValue mCachedValue;
private TKey mCachedKey;
private bool mHasCachedValue = false;
public TValue GetValue(TKey key)
{
if (mHasCachedValue && mCachedKey.Equals(key))
{
return mCachedValue;
}
mCachedValue = mGetValueFunc(key);
mCachedKey = key;
mHasCachedValue = true;
return mCachedValue;
}
}
}