Spaces:
Runtime error
Runtime error
| ; | |
| var toPosInt = require('es5-ext/number/to-pos-integer') | |
| , create = Object.create, hasOwnProperty = Object.prototype.hasOwnProperty; | |
| module.exports = function (limit) { | |
| var size = 0, base = 1, queue = create(null), map = create(null), index = 0, del; | |
| limit = toPosInt(limit); | |
| return { | |
| hit: function (id) { | |
| var oldIndex = map[id], nuIndex = ++index; | |
| queue[nuIndex] = id; | |
| map[id] = nuIndex; | |
| if (!oldIndex) { | |
| ++size; | |
| if (size <= limit) return; | |
| id = queue[base]; | |
| del(id); | |
| return id; | |
| } | |
| delete queue[oldIndex]; | |
| if (base !== oldIndex) return; | |
| while (!hasOwnProperty.call(queue, ++base)) continue; //jslint: skip | |
| }, | |
| delete: del = function (id) { | |
| var oldIndex = map[id]; | |
| if (!oldIndex) return; | |
| delete queue[oldIndex]; | |
| delete map[id]; | |
| --size; | |
| if (base !== oldIndex) return; | |
| if (!size) { | |
| index = 0; | |
| base = 1; | |
| return; | |
| } | |
| while (!hasOwnProperty.call(queue, ++base)) continue; //jslint: skip | |
| }, | |
| clear: function () { | |
| size = 0; | |
| base = 1; | |
| queue = create(null); | |
| map = create(null); | |
| index = 0; | |
| } | |
| }; | |
| }; | |