utils/node_modules/@rushstack/node-core-library/lib/StringBuilder.js
2024-02-07 01:33:07 -05:00

41 lines
1.5 KiB
JavaScript

"use strict";
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
// See LICENSE in the project root for license information.
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.
*
* @public
*/
class StringBuilder {
constructor() {
this._chunks = [];
}
/** {@inheritDoc IStringBuilder.append} */
append(text) {
this._chunks.push(text);
}
/** {@inheritDoc IStringBuilder.toString} */
toString() {
if (this._chunks.length === 0) {
return '';
}
if (this._chunks.length > 1) {
const joined = this._chunks.join('');
this._chunks.length = 1;
this._chunks[0] = joined;
}
return this._chunks[0];
}
}
exports.StringBuilder = StringBuilder;
//# sourceMappingURL=StringBuilder.js.map