#

API Docs for: 0.6.0
Show: Inherited Protected Private Deprecated

# File: src/utils/Pool.js

    module.exports = Pool;

    /**
     * For pooling objects that can be reused.
     * @class Pool
     * @constructor
     */
    function Pool(){
        /**
         * The pooled objects
         * @property {Array} objects
         */
        this.objects = [];

        /**
         * Constructor of the objects
         * @property {mixed} type
         */
        this.type = Object;
    }

    /**
     * Release an object after use
     * @method release
     * @param {Object} obj
     */
    Pool.prototype.release = function(){
        var Nargs = arguments.length;
        for(var i=0; i!==Nargs; i++){
            this.objects.push(arguments[i]);
        }
    };

    /**
     * Get an object
     * @method get
     * @return {mixed}
     */
    Pool.prototype.get = function(){
        if(this.objects.length===0){
            return this.constructObject();
        } else {
            return this.objects.pop();
        }
    };

    /**
     * Construct an object. Should be implmented in each subclass.
     * @method constructObject
     * @return {mixed}
     */
    Pool.prototype.constructObject = function(){
        throw new Error("constructObject() not implemented in this Pool subclass yet!");
    };