Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: runtime/bin/list_stream.dart

Issue 9029001: Add close to input stream and cleanup socket and streams (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 class ListInputStream extends _BaseDataInputStream implements InputStream { 5 class ListInputStream extends _BaseDataInputStream implements InputStream {
6 ListInputStream(List<int> this._buffer) { 6 ListInputStream(List<int> this._buffer) {
7 _streamMarkedClosed = true; 7 _streamMarkedClosed = true;
8 } 8 }
9 9
10 int available() => _buffer.length - _offset; 10 int available() => _buffer.length - _offset;
11 11
12 List<int> _read(int bytesToRead) { 12 List<int> _read(int bytesToRead) {
13 if (_offset == 0 && bytesToRead == _buffer.length) { 13 if (_offset == 0 && bytesToRead == _buffer.length) {
14 _offset = _buffer.length; 14 _offset = _buffer.length;
15 return _buffer; 15 return _buffer;
16 } else { 16 } else {
17 List<int> result = _buffer.getRange(_offset, bytesToRead); 17 List<int> result = _buffer.getRange(_offset, bytesToRead);
18 _offset += bytesToRead; 18 _offset += bytesToRead;
19 return result; 19 return result;
20 } 20 }
21 } 21 }
22 22
23 int _readInto(List<int> buffer, int offset, int bytesToRead) { 23 int _readInto(List<int> buffer, int offset, int bytesToRead) {
24 buffer.setRange(offset, bytesToRead, _buffer, _offset); 24 buffer.setRange(offset, bytesToRead, _buffer, _offset);
25 _offset += bytesToRead; 25 _offset += bytesToRead;
26 return bytesToRead; 26 return bytesToRead;
27 } 27 }
28 28
29 void _close() {
30 _offset = _buffer.length;
31 }
32
29 List<int> _buffer; 33 List<int> _buffer;
30 int _offset = 0; 34 int _offset = 0;
35 bool _closeCalled = false;
Mads Ager (google) 2011/12/23 08:35:40 Is this ever used?
Søren Gjesse 2012/01/02 11:51:17 No, removed.
31 } 36 }
32 37
33 38
34 class DynamicListInputStream 39 class DynamicListInputStream
35 extends _BaseDataInputStream implements InputStream { 40 extends _BaseDataInputStream implements InputStream {
36 DynamicListInputStream() : _bufferList = new _BufferList(); 41 DynamicListInputStream() : _bufferList = new _BufferList();
37 42
38 int available() => _bufferList.length; 43 int available() => _bufferList.length;
39 44
40 void write(List<int> data) { 45 void write(List<int> data) {
46 if (_streamMarkedClosed || _closeCalled) {
Mads Ager (google) 2011/12/23 08:35:40 I think you can get rid of _closeCalled here as we
Søren Gjesse 2012/01/02 11:51:17 Done.
47 throw new StreamException.streamClosed();
48 }
41 _bufferList.add(data); 49 _bufferList.add(data);
42 _checkScheduleCallbacks(); 50 _checkScheduleCallbacks();
43 } 51 }
44 52
45 void markEndOfStream() { 53 void markEndOfStream() {
46 _streamMarkedClosed = true; 54 _streamMarkedClosed = true;
47 _checkScheduleCallbacks(); 55 _checkScheduleCallbacks();
48 } 56 }
49 57
50 List<int> _read(int bytesToRead) { 58 List<int> _read(int bytesToRead) {
51 return _bufferList.readBytes(bytesToRead); 59 return _bufferList.readBytes(bytesToRead);
52 } 60 }
53 61
54 int _readInto(List<int> buffer, int offset, int bytesToRead) { 62 int _readInto(List<int> buffer, int offset, int bytesToRead) {
55 List<int> tmp = _bufferList.readBytes(byteToRead); 63 List<int> tmp = _bufferList.readBytes(byteToRead);
56 buffer.setRange(offset, bytesToRead, tmp, _offset); 64 buffer.setRange(offset, bytesToRead, tmp, _offset);
57 return bytesToRead; 65 return bytesToRead;
58 } 66 }
59 67
68 void _close() {
69 _streamMarkedClosed = true;
70 _bufferList.clear();
71 }
72
60 _BufferList _bufferList; 73 _BufferList _bufferList;
74 bool _closeCalled = false;
61 } 75 }
62 76
63 77
64 class ListOutputStream implements OutputStream { 78 class ListOutputStream implements OutputStream {
65 ListOutputStream() : _bufferList = new _BufferList(); 79 ListOutputStream() : _bufferList = new _BufferList();
66 80
67 bool write(List<int> buffer, [bool copyBuffer = false]) { 81 bool write(List<int> buffer, [bool copyBuffer = false]) {
68 if (_streamMarkedClosed) throw new StreamException.streamClosed(); 82 if (_streamMarkedClosed) throw new StreamException.streamClosed();
69 if (copyBuffer) { 83 if (copyBuffer) {
70 _bufferList.add(buffer.getRange(0, buffer.length)); 84 _bufferList.add(buffer.getRange(0, buffer.length));
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 } 154 }
141 155
142 _BufferList _bufferList; 156 _BufferList _bufferList;
143 bool _streamMarkedClosed = false; 157 bool _streamMarkedClosed = false;
144 bool _closeCallbackCalled = false; 158 bool _closeCallbackCalled = false;
145 Timer _scheduledNoPendingWriteCallback; 159 Timer _scheduledNoPendingWriteCallback;
146 Timer _scheduledCloseCallback; 160 Timer _scheduledCloseCallback;
147 Function _clientNoPendingWriteHandler; 161 Function _clientNoPendingWriteHandler;
148 Function _clientCloseHandler; 162 Function _clientCloseHandler;
149 } 163 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698