using System;
using System.Collections.Concurrent;
namespace LeafWeb.Core.Utility
{
public static class Memoizer
{
public static Func ThreadsafeMemoize(Func f)
{
var cache = new ConcurrentDictionary();
return argument => cache.GetOrAdd(argument, f);
}
public static Func ThreadsafeMemoize(Func f)
{
var cache = new ConcurrentDictionary, R>();
return (a1, a2) => cache.GetOrAdd(Tuple.Create(a1, a2), t => f(t.Item1, t.Item2));
}
}
}