/*! * 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, invalidate LRU if (len > this.limit) this.remove(this.keys.shift()); var arr = this.store[key] = []; arr.createdAt = new Date; return arr; };