| /** Used as references for various `Number` constants. */ | |
| var MAX_SAFE_INTEGER = 9007199254740991; | |
| 
 | |
| /* Built-in method references for those with the same name as other `lodash` methods. */ | |
| var nativeFloor = Math.floor; | |
| 
 | |
| /** | |
|  * The base implementation of `_.repeat` which doesn't coerce arguments. | |
|  * | |
|  * @private | |
|  * @param {string} string The string to repeat. | |
|  * @param {number} n The number of times to repeat the string. | |
|  * @returns {string} Returns the repeated string. | |
|  */ | |
| function baseRepeat(string, n) { | |
|   var result = ''; | |
|   if (!string || n < 1 || n > MAX_SAFE_INTEGER) { | |
|     return result; | |
|   } | |
|   // Leverage the exponentiation by squaring algorithm for a faster repeat. | |
|   // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. | |
|   do { | |
|     if (n % 2) { | |
|       result += string; | |
|     } | |
|     n = nativeFloor(n / 2); | |
|     if (n) { | |
|       string += string; | |
|     } | |
|   } while (n); | |
| 
 | |
|   return result; | |
| } | |
| 
 | |
| module.exports = baseRepeat;
 |