diff options
Diffstat (limited to 'lib/freelist.js')
-rw-r--r-- | lib/freelist.js | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/freelist.js b/lib/freelist.js new file mode 100644 index 0000000000..a09fb4b21e --- /dev/null +++ b/lib/freelist.js @@ -0,0 +1,22 @@ +// This is a free list to avoid creating so many of the same object. +exports.FreeList = function(name, max, constructor) { + this.name = name; + this.constructor = constructor; + this.max = max; + this.list = []; +} + + +exports.FreeList.prototype.alloc = function () { + //debug("alloc " + this.name + " " + this.list.length); + return this.list.length ? this.list.shift() + : this.constructor.apply(this, arguments); +}; + + +exports.FreeList.prototype.free = function (obj) { + //debug("free " + this.name + " " + this.list.length); + if (this.list.length < this.max) { + this.list.push(obj); + } +}; |