diff options
| author | Tristan Zur <tzur@web.web.ccwn.org> | 2014-03-27 22:27:47 +0100 |
|---|---|---|
| committer | Tristan Zur <tzur@web.web.ccwn.org> | 2014-03-27 22:27:47 +0100 |
| commit | b62676ca5d3d6f6ba3f019ea3f99722e165a98d8 (patch) | |
| tree | 86722cb80f07d4569f90088eeaea2fc2f6e2ef94 /js/dojo/dojox/lang/aspect/memoizer.js | |
Diffstat (limited to 'js/dojo/dojox/lang/aspect/memoizer.js')
| -rw-r--r-- | js/dojo/dojox/lang/aspect/memoizer.js | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/js/dojo/dojox/lang/aspect/memoizer.js b/js/dojo/dojox/lang/aspect/memoizer.js new file mode 100644 index 0000000..4692aed --- /dev/null +++ b/js/dojo/dojox/lang/aspect/memoizer.js @@ -0,0 +1,49 @@ +//>>built +// wrapped by build app +define("dojox/lang/aspect/memoizer", ["dijit","dojo","dojox"], function(dijit,dojo,dojox){ +dojo.provide("dojox.lang.aspect.memoizer"); + +(function(){ + var aop = dojox.lang.aspect; + + var memoize1 = { + around: function(key){ + var ctx = aop.getContext(), self = ctx.joinPoint, that = ctx.instance, t, u, ret; + if((t = that.__memoizerCache) && (t = t[self.targetName]) && (key in t)){ + return t[key]; + } + var ret = aop.proceed.apply(null, arguments); + if(!(t = that.__memoizerCache)){ t = that.__memoizerCache = {}; } + if(!(u = t[self.targetName])){ u = t[self.targetName] = {}; } + return u[key] = ret; + } + }; + + var memoizeN = function(/*Function*/keyMaker){ + return { + around: function(/*arguments*/){ + var ctx = aop.getContext(), self = ctx.joinPoint, that = ctx.instance, t, u, ret, + key = keyMaker.apply(that, arguments); + if((t = that.__memoizerCache) && (t = t[self.targetName]) && (key in t)){ + return t[key]; + } + var ret = aop.proceed.apply(null, arguments); + if(!(t = that.__memoizerCache)){ t = that.__memoizerCache = {}; } + if(!(u = t[self.targetName])){ u = t[self.targetName] = {}; } + return u[key] = ret; + } + }; + }; + + aop.memoizer = function(/*Function?*/ keyMaker){ + // summary: + // Returns an object, which can be used to count calls to methods. + // + // keyMaker: + // the function, which takes method's arguments and returns a key, + // which can be used to index the result. + + return arguments.length == 0 ? memoize1 : memoizeN(keyMaker); // Object + }; +})(); +}); |
