Files
sdk/compiler/lib/implementation/string_buffer.dart
T
zundel@google.com 1486f2602d Revert "Removes dartc reliance on its own libraries, now can be targeted at any implementation's libraries"
This reverts commit r5885 which works locally, but not on the builder

Review URL: https://chromiumcodereview.appspot.com//9865025

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@5886 260f80e4-7a28-3924-810f-c04153c831b5
2012-03-27 17:04:03 +00:00

88 lines
2.0 KiB
Dart

// 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<Object> objects) {
if (objects == null) {
throw const NullPointerException();
}
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 = 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;
}
List<String> _buffer;
int _length;
}