00001 var MapCache = require('./_MapCache');
00002
00004 var FUNC_ERROR_TEXT = 'Expected a function';
00005
00050 function memoize(func, resolver) {
00051 if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
00052 throw new TypeError(FUNC_ERROR_TEXT);
00053 }
00054 var memoized = function() {
00055 var args = arguments,
00056 key = resolver ? resolver.apply(this, args) : args[0],
00057 cache = memoized.cache;
00058
00059 if (cache.has(key)) {
00060 return cache.get(key);
00061 }
00062 var result = func.apply(this, args);
00063 memoized.cache = cache.set(key, result) || cache;
00064 return result;
00065 };
00066 memoized.cache = new (memoize.Cache || MapCache);
00067 return memoized;
00068 }
00069
00070
00071 memoize.Cache = MapCache;
00072
00073 module.exports = memoize;