MSV FM

dot.antimicrobial@66.96.161.157: ~ $
Path : /hermes/sb_web/b2680/summitdaymedia.com/demos/aframe-master/src/utils/
File Upload :
Current < : /hermes/sb_web/b2680/summitdaymedia.com/demos/aframe-master/src/utils/object-pool.js

/*
  Adapted deePool by Kyle Simpson.
  MIT License: http://getify.mit-license.org
*/
var EMPTY_SLOT = Object.freeze(Object.create(null));

// Default object factory.
function defaultObjectFactory () { return {}; }

/**
 * Create a new pool.
 */
module.exports.createPool = function createPool (objectFactory) {
  var objPool = [];
  var nextFreeSlot = null;  // Pool location to look for a free object to use.

  objectFactory = objectFactory || defaultObjectFactory;

  function use () {
    var objToUse;
    if (nextFreeSlot === null || nextFreeSlot === objPool.length) {
      grow(objPool.length || 5);
    }
    objToUse = objPool[nextFreeSlot];
    objPool[nextFreeSlot++] = EMPTY_SLOT;
    clearObject(objToUse);
    return objToUse;
  }

  function recycle (obj) {
    if (!(obj instanceof Object)) { return; }
    if (nextFreeSlot === null || nextFreeSlot === -1) {
      objPool[objPool.length] = obj;
      return;
    }
    objPool[--nextFreeSlot] = obj;
  }

  function grow (count) {
    var currentLength;
    var i;

    count = count === undefined ? objPool.length : count;
    if (count > 0 && nextFreeSlot == null) {
      nextFreeSlot = 0;
    }

    if (count > 0) {
      currentLength = objPool.length;
      objPool.length += Number(count);
      for (i = currentLength; i < objPool.length; i++) {
        // Add new obj to pool.
        objPool[i] = objectFactory();
      }
    }

    return objPool.length;
  }

  function size () {
    return objPool.length;
  }

  return {
    grow: grow,
    pool: objPool,
    recycle: recycle,
    size: size,
    use: use
  };
};

function clearObject (obj) {
  var key;
  if (!(obj.constructor === Object)) { return; }
  for (key in obj) { obj[key] = undefined; }
}
module.exports.clearObject = clearObject;