pooled

mutate constructors into a poolable form

pooled

turn a javascript constructor into a pooled resource that can be attain'd and release'd (to reduce garbage generation by reusing objects; useful in games where you want to avoid GC at all costs).

 
function Point(xyz) {
  this.x = x
  this.y = y
  this.= z
}
 
Point.prototype.onrelease = function() {
  console.log('released')
}
 
Point = pooled(Point)
 
var p = Point(0, 0, 0)
p.release() // -> "released" 
console.log(Point.pooled()) // -> 1 
var p2 = Point(12, 12, 12)
console.log(Point.pooled()) // -> 0 
console.log(Point.extant()) // -> 1 
console.log(p2 === p)       // true  
 
Point.allocate(100, 12, 21, 1)  // preallocate 100 Point objects 
                                // with arguments 
 

Create a pooled constructor from an existing constructor.

If shouldSeal is true, resultant objects will be Object.seal'd before being returned.

Forward the arguments to the original constructor and create a new instance.

Get the number of currently held instances of newcons.

Get the number of currently pooled (released) instances of newcons.

Allocate number new newcons instances into the pool. Forward the provided arguments to them.

Returns the number of currently pooled objects.

Releases this instance. You should get rid of the reference to it in your code, as some other code might reuse this object at later point.

If there is an onrelease method on the object, it'll get called.

MIT