| Index: sdk/lib/core/sink.dart
|
| diff --git a/sdk/lib/core/sink.dart b/sdk/lib/core/sink.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ef1c2aa686bc6e35d85270bba34b14c08e6192dd
|
| --- /dev/null
|
| +++ b/sdk/lib/core/sink.dart
|
| @@ -0,0 +1,40 @@
|
| +// Copyright (c) 2012, 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.
|
| +
|
| +/**
|
| + * An interface for an object that can receive a sequence of values.
|
| + */
|
| +abstract class Sink<T> {
|
| + /** Write a value to the sink. */
|
| + add(T value);
|
| + /** Tell the sink that no further values will be written. */
|
| + void close();
|
| +}
|
| +
|
| +// ----------------------------------------------------------------------
|
| +// Collections/Sink interoperability
|
| +// ----------------------------------------------------------------------
|
| +
|
| +typedef void _CollectionSinkCallback<T>(Collection<T> collection);
|
| +
|
| +/** Sink that stores incoming data in a collection. */
|
| +class CollectionSink<T> implements Sink<T> {
|
| + final Collection<T> collection;
|
| + final _CollectionSinkCallback<T> callback;
|
| + bool _isClosed = false;
|
| +
|
| + CollectionSink(this.collection, [void callback(Collection<T> collection)])
|
| + : this.callback = callback;
|
| +
|
| + add(T value) {
|
| + if (_isClosed) throw new StateError("Adding to closed sink");
|
| + collection.add(value);
|
| + }
|
| +
|
| + void close() {
|
| + if (_isClosed) throw new StateError("Closing closed sink");
|
| + _isClosed = true;
|
| + if (callback != null) callback(collection);
|
| + }
|
| +}
|
|
|