utils/node_modules/@microsoft/tsdoc/lib-commonjs/emitters/StringBuilder.js
2024-02-07 01:33:07 -05:00

38 lines
1.5 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StringBuilder = void 0;
/**
* This class allows a large text string to be constructed incrementally by appending small chunks. The final
* string can be obtained by calling StringBuilder.toString().
*
* @remarks
* A naive approach might use the `+=` operator to append strings: This would have the downside of copying
* the entire string each time a chunk is appended, resulting in `O(n^2)` bytes of memory being allocated
* (and later freed by the garbage collector), and many of the allocations could be very large objects.
* StringBuilder avoids this overhead by accumulating the chunks in an array, and efficiently joining them
* when `getText()` is finally called.
*/
var StringBuilder = /** @class */ (function () {
function StringBuilder() {
this._chunks = [];
}
/** {@inheritdoc IStringBuilder.append} */
StringBuilder.prototype.append = function (text) {
this._chunks.push(text);
};
/** {@inheritdoc IStringBuilder.toString} */
StringBuilder.prototype.toString = function () {
if (this._chunks.length === 0) {
return '';
}
if (this._chunks.length > 1) {
var joined = this._chunks.join('');
this._chunks.length = 1;
this._chunks[0] = joined;
}
return this._chunks[0];
};
return StringBuilder;
}());
exports.StringBuilder = StringBuilder;
//# sourceMappingURL=StringBuilder.js.map