blob: 8fadafaa1259f867a224224f38a8a58969df5692 [file] [log] [blame]
// 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<String> _buffer;
int _length;
/// Creates the string buffer with an initial content.
/* patch */ StringBuffer([Object content = ""]) {
_buffer = new List<String>();
_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<String>();
_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;
}
}