You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
1.1 KiB
81 lines
1.1 KiB
|
|
/*! |
|
* Connect - Cache |
|
* Copyright(c) 2011 Sencha Inc. |
|
* MIT Licensed |
|
*/ |
|
|
|
/** |
|
* Expose `Cache`. |
|
*/ |
|
|
|
module.exports = Cache; |
|
|
|
/** |
|
* LRU cache store. |
|
* |
|
* @param {Number} limit |
|
* @api private |
|
*/ |
|
|
|
function Cache(limit) { |
|
this.store = {}; |
|
this.keys = []; |
|
this.limit = limit; |
|
} |
|
|
|
/** |
|
* Touch `key`, promoting the object. |
|
* |
|
* @param {String} key |
|
* @param {Number} i |
|
* @api private |
|
*/ |
|
|
|
Cache.prototype.touch = function(key, i){ |
|
this.keys.splice(i,1); |
|
this.keys.push(key); |
|
}; |
|
|
|
/** |
|
* Remove `key`. |
|
* |
|
* @param {String} key |
|
* @api private |
|
*/ |
|
|
|
Cache.prototype.remove = function(key){ |
|
delete this.store[key]; |
|
}; |
|
|
|
/** |
|
* Get the object stored for `key`. |
|
* |
|
* @param {String} key |
|
* @return {Array} |
|
* @api private |
|
*/ |
|
|
|
Cache.prototype.get = function(key){ |
|
return this.store[key]; |
|
}; |
|
|
|
/** |
|
* Add a cache `key`. |
|
* |
|
* @param {String} key |
|
* @return {Array} |
|
* @api private |
|
*/ |
|
|
|
Cache.prototype.add = function(key){ |
|
// initialize store |
|
var len = this.keys.push(key); |
|
|
|
// limit reached, invalid LRU |
|
if (len > this.limit) this.remove(this.keys.shift()); |
|
|
|
var arr = this.store[key] = []; |
|
arr.createdAt = new Date; |
|
return arr; |
|
};
|
|
|