// Copyright (c) 2013, 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.

part of dart.core;

abstract class StringSink {
  /**
   * Converts [obj] to a String by invoking [Object.toString] and
   * adds the result to `this`.
   */
  void write(Object? obj);

  /**
   * Iterates over the given [objects] and [write]s them in sequence.
   */
  void writeAll(Iterable<dynamic> objects, [String separator = ""]);

  /**
   * Converts [obj] to a String by invoking [Object.toString] and
   * adds the result to `this`, followed by a newline.
   */
  void writeln([Object? obj = ""]);

  /**
   * Writes the [charCode] to `this`.
   *
   * This method is equivalent to `write(new String.fromCharCode(charCode))`.
   */
  void writeCharCode(int charCode);
}
