| // 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 StringBuffer implements OutputStream { |
| /** |
| * Creates the string buffer with an initial content. |
| */ |
| StringBuffer([String content = ""]) { |
| clear(); |
| append(content); |
| } |
| |
| /// From OutputStream. Appends [str] to the buffer. |
| void writeString(String str) { |
| append(str); |
| } |
| |
| /// From OutputStream. Appends the [charCode] to the buffer. |
| void writeCharCode(int charCode) { |
| throw "StringBuffer.writeCharCode Unimplemented"; |
| } |
| |
| void writeByte(int value) { |
| throw "StringBuffer.writeByte unimplemented"; |
| } |
| |
| void writeByteArray(Array<int> buffer, int offset, int length) { |
| throw "StringBuffer.writeByteArray unimplemented"; |
| } |
| |
| void close() {} |
| void flush() {} |
| |
| |
| /** |
| * Returns the length of the buffer. |
| */ |
| int get length { |
| return length_; |
| } |
| |
| /** |
| * Appends [str] to the buffer. |
| */ |
| void append(String str) { |
| if (str == null || str.isEmpty) return; |
| buffer_.add(str); |
| length_ += str.length; |
| } |
| |
| /** |
| * Appends all items in [strings] to the buffer. |
| */ |
| void appendAll(Collection<String> strings) { |
| strings.forEach((str) { append(str); }); |
| } |
| |
| /** |
| * Clears the string buffer. |
| */ |
| void clear() { |
| buffer_ = new GrowableArray<String>(4); |
| length_ = 0; |
| } |
| |
| /** |
| * 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 append operation, there is no |
| // need to update it in this function. |
| return result; |
| } |
| |
| GrowableArray<String> buffer_; |
| int length_; |
| final bool closed = false; |
| } |