| // 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; | |
| } |