summaryrefslogtreecommitdiff
path: root/lib/freelist.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/freelist.js')
-rw-r--r--lib/freelist.js22
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);
+ }
+};