Index: sdk/lib/io/stream_util.dart |
diff --git a/sdk/lib/io/stream_util.dart b/sdk/lib/io/stream_util.dart |
deleted file mode 100644 |
index b68b8fd7c295af1ce3d9794da574177875a272b0..0000000000000000000000000000000000000000 |
--- a/sdk/lib/io/stream_util.dart |
+++ /dev/null |
@@ -1,211 +0,0 @@ |
-// 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. |
- |
-part of dart.io; |
- |
-abstract class _BaseDataInputStream { |
- int available(); |
- |
- List<int> read([int len]) { |
- if (_closeCallbackCalled || _scheduledCloseCallback != null) return null; |
- int bytesToRead = available(); |
- if (bytesToRead == 0) { |
- _checkScheduleCallbacks(); |
- return null; |
- } |
- if (len != null) { |
- if (len <= 0) { |
- throw new StreamException("Illegal length $len"); |
- } else if (bytesToRead > len) { |
- bytesToRead = len; |
- } |
- } |
- return _read(bytesToRead); |
- } |
- |
- int readInto(List<int> buffer, [int offset = 0, int len]) { |
- if (_closeCallbackCalled || _scheduledCloseCallback != null) return 0; |
- if (len == null) len = buffer.length; |
- if (offset < 0) throw new StreamException("Illegal offset $offset"); |
- if (len < 0) throw new StreamException("Illegal length $len"); |
- int bytesToRead = min(len, available()); |
- return _readInto(buffer, offset, bytesToRead); |
- } |
- |
- void pipe(OutputStream output, {bool close: true}) { |
- _pipe(this, output, close: close); |
- } |
- |
- void close() { |
- _cancelScheduledDataCallback(); |
- _close(); |
- _checkScheduleCallbacks(); |
- } |
- |
- bool get closed => _closeCallbackCalled; |
- |
- void set onData(void callback()) { |
- _clientDataHandler = callback; |
- _checkScheduleCallbacks(); |
- } |
- |
- void set onClosed(void callback()) { |
- _clientCloseHandler = callback; |
- _checkScheduleCallbacks(); |
- } |
- |
- void set onError(void callback(e)) { |
- _clientErrorHandler = callback; |
- } |
- |
- void _reportError(e) { |
- if (_clientErrorHandler != null) { |
- _clientErrorHandler(e); |
- } else { |
- throw e; |
- } |
- } |
- |
- List<int> _read(int bytesToRead); |
- |
- void _dataReceived() { |
- // More data has been received asynchronously. Perform the data |
- // handler callback now. |
- _cancelScheduledDataCallback(); |
- if (_clientDataHandler != null) { |
- _clientDataHandler(); |
- } |
- _checkScheduleCallbacks(); |
- } |
- |
- void _closeReceived() { |
- // Close indication has been received asynchronously. Perform the |
- // close callback now if all data has been delivered. |
- _streamMarkedClosed = true; |
- if (available() == 0) { |
- _closeCallbackCalled = true; |
- if (_clientCloseHandler != null) _clientCloseHandler(); |
- } else { |
- _checkScheduleCallbacks(); |
- } |
- } |
- |
- void _cancelScheduledDataCallback() { |
- if (_scheduledDataCallback != null) { |
- _scheduledDataCallback.cancel(); |
- _scheduledDataCallback = null; |
- } |
- } |
- |
- void _checkScheduleCallbacks() { |
- void issueDataCallback() { |
- _scheduledDataCallback = null; |
- if (_clientDataHandler != null) { |
- _clientDataHandler(); |
- _checkScheduleCallbacks(); |
- } |
- } |
- |
- void issueCloseCallback() { |
- _scheduledCloseCallback = null; |
- _closeCallbackCalled = true; |
- if (_clientCloseHandler != null) _clientCloseHandler(); |
- } |
- |
- // Schedule data callback if there is more data to read. Schedule |
- // close callback once when all data has been read. Only schedule |
- // a new callback if the previous one has actually been called. |
- if (!_closeCallbackCalled) { |
- if (available() > 0) { |
- if (_scheduledDataCallback == null) { |
- _scheduledDataCallback = Timer.run(issueDataCallback); |
- } |
- } else if (_streamMarkedClosed && _scheduledCloseCallback == null) { |
- _cancelScheduledDataCallback(); |
- _close(); |
- _scheduledCloseCallback = Timer.run(issueCloseCallback); |
- } |
- } |
- } |
- |
- // When this is set to true the stream is marked closed. When a |
- // stream is marked closed no more data can arrive and the value |
- // from available is now all remaining data. If this is true and the |
- // value of available is zero the close handler is called. |
- bool _streamMarkedClosed = false; |
- |
- // When this is set to true the close callback has been called and |
- // the stream is fully closed. |
- bool _closeCallbackCalled = false; |
- |
- Timer _scheduledDataCallback; |
- Timer _scheduledCloseCallback; |
- Function _clientDataHandler; |
- Function _clientCloseHandler; |
- Function _clientErrorHandler; |
-} |
- |
- |
-void _pipe(InputStream input, OutputStream output, {bool close}) { |
- Function pipeDataHandler; |
- Function pipeCloseHandler; |
- Function pipeNoPendingWriteHandler; |
- |
- Function _inputCloseHandler; |
- |
- pipeDataHandler = () { |
- List<int> data; |
- while ((data = input.read()) != null) { |
- if (!output.write(data)) { |
- input.onData = null; |
- output.onNoPendingWrites = pipeNoPendingWriteHandler; |
- break; |
- } |
- } |
- }; |
- |
- pipeCloseHandler = () { |
- if (close) output.close(); |
- if (_inputCloseHandler != null) { |
- _inputCloseHandler(); |
- } |
- }; |
- |
- pipeNoPendingWriteHandler = () { |
- input.onData = pipeDataHandler; |
- output.onNoPendingWrites = null; |
- }; |
- |
- _inputCloseHandler = input._clientCloseHandler; |
- input.onData = pipeDataHandler; |
- input.onClosed = pipeCloseHandler; |
- output.onNoPendingWrites = null; |
-} |
- |
- |
-class _BaseOutputStream { |
- bool writeString(String string, [Encoding encoding = Encoding.UTF_8]) { |
- if (string.length > 0) { |
- // Encode and write data. |
- _StringEncoder encoder = _StringEncoders.encoder(encoding); |
- List<int> data = encoder.encodeString(string); |
- return write(data, false); |
- } |
- return true; |
- } |
- |
- void set onError(void callback(e)) { |
- _onError = callback; |
- } |
- |
- void _reportError(e) { |
- if (_onError != null) { |
- _onError(e); |
- } else { |
- throw e; |
- } |
- } |
- |
- Function _onError; |
-} |