blob: 0906967a3d1069a82ea93983b9da7db0d867745d [file] [log] [blame]
// Copyright (c) 2019, 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.
/// A [StringSink] that writes into multiple [StringSink]s.
class TeeStringSink implements StringSink {
final Set<StringSink> _sinks = {};
bool addSink(StringSink sink) {
return _sinks.add(sink);
}
bool removeSink(StringSink sink) {
return _sinks.remove(sink);
}
@override
void write(Object? obj) {
if (_sinks.isEmpty) return;
for (var sink in _sinks) {
sink.write(obj);
}
}
@override
void writeAll(Iterable<dynamic> objects, [String separator = '']) {
if (_sinks.isEmpty) return;
for (var sink in _sinks) {
sink.writeAll(objects, separator);
}
}
@override
void writeCharCode(int charCode) {
if (_sinks.isEmpty) return;
for (var sink in _sinks) {
sink.writeCharCode(charCode);
}
}
@override
void writeln([Object? obj = '']) {
if (_sinks.isEmpty) return;
for (var sink in _sinks) {
sink.writeln(obj);
}
}
}