// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. patch class StringBuffer { List _buffer; int _length; /// Creates the string buffer with an initial content. /* patch */ StringBuffer([Object content = ""]) { _buffer = new List(); _length = 0; write(content); } /* patch */ int get length => _length; /// Adds [obj] to the buffer. /* patch */ void write(Object obj) { // TODO(srdjan): The following four lines could be replaced by // '$obj', but apparently this is too slow on the Dart VM. String str; if (obj is String) { str = obj; } else { str = obj.toString(); if (str is! String) { throw new ArgumentError('toString() did not return a string'); } } if (str.isEmpty) return; _buffer.add(str); _length += str.length; } /// Clears the string buffer. /* patch */ void clear() { _buffer = new List(); _length = 0; } /// Returns the contents of buffer as a concatenated string. /* patch */ String toString() { if (_buffer.length == 0) return ""; if (_buffer.length == 1) return _buffer[0]; String result = _StringBase.concatAll(_buffer); _buffer.clear(); _buffer.add(result); // Since we track the length at each add operation, there is no // need to update it in this function. return result; } }