blob: ceb59350d3a43136d3f5eb0ccb9b0f84a25e7b22 [file] [log] [blame]
// Copyright (c) 2011, 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.
/**
* The StringBuffer class is useful for concatenating strings
* efficiently. Only on a call to [toString] are the strings
* concatenated to a single String.
*/
class StringBufferImpl implements StringBuffer {
/**
* Creates the string buffer with an initial content.
*/
StringBufferImpl(Object content) {
clear();
add(content);
}
/**
* Returns the length of the buffer.
*/
int get length {
return _length;
}
bool isEmpty() {
return _length === 0;
}
/**
* Adds [obj] to the buffer. Returns [this].
*/
StringBuffer add(Object obj) {
String str = obj.toString();
if (str === null || str.isEmpty()) {
return this;
}
_buffer.add(str);
_length += str.length;
return this;
}
/**
* Adds all items in [objects] to the buffer. Returns [this].
*/
StringBuffer addAll(Collection objects) {
for (Object obj in objects) {
add(obj);
}
return this;
}
/**
* Adds the string representation of [charCode] to the buffer.
* Returns [this].
*/
StringBuffer addCharCode(int charCode) {
return add(new String.fromCharCodes([charCode]));
}
/**
* Clears the string buffer. Returns [this].
*/
StringBuffer clear() {
_buffer = new List<String>();
_length = 0;
return this;
}
/**
* Returns the contents of buffer as a concatenated string.
*/
String toString() {
if (_buffer.length === 0) return "";
if (_buffer.length === 1) return _buffer[0];
String result = StringImplementation.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;
}
List<String> _buffer;
int _length;
}