public static Func <A, TR> AsCacheable <A, TR>(this Func <A, TR> function, out IFunctionCache cache) { var autocache = new AutoCache <A, TR>(); cache = autocache; return(a => autocache.IsCached(a) ? autocache.GetCachedValue(a) : autocache.AddCachedValue(a, function(a))); }
public static Func <A, B, TR> AsCacheable <A, B, TR>(this Func <A, B, TR> function, out IFunctionCache cache) { var autocache = new AutoCache <OpaqueKey <A, B>, TR>(); cache = autocache; return((a, b) => { var key = new OpaqueKey <A, B>(a, b); return autocache.IsCached(key) ? autocache.GetCachedValue(key) : autocache.AddCachedValue(key, function(a, b)); }); }