/** Used to detect hot functions by number of calls within a span of milliseconds. */ var HOT_COUNT = 800,

HOT_SPAN = 16;

/* Built-in method references for those with the same name as other `lodash` methods. */ var nativeNow = Date.now;

/**

* Creates a function that'll short out and invoke `identity` instead
* of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
* milliseconds.
*
* @private
* @param {Function} func The function to restrict.
* @returns {Function} Returns the new shortable function.
*/

function shortOut(func) {

var count = 0,
    lastCalled = 0;

return function() {
  var stamp = nativeNow(),
      remaining = HOT_SPAN - (stamp - lastCalled);

  lastCalled = stamp;
  if (remaining > 0) {
    if (++count >= HOT_COUNT) {
      return arguments[0];
    }
  } else {
    count = 0;
  }
  return func.apply(undefined, arguments);
};

}

module.exports = shortOut;