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

Unified Diff: runtime/bin/file_impl.dart

Issue 8318009: Update the streams interfaces (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review comments from ager@ Created 9 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/bin/file.dart ('k') | runtime/bin/input_stream.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/file_impl.dart
diff --git a/runtime/bin/file_impl.dart b/runtime/bin/file_impl.dart
index 58da22fef157c9aa7530dcf751ccf3c543e79e32..00f801d7d9585db6bb4f933fe94497dd1ea97265 100644
--- a/runtime/bin/file_impl.dart
+++ b/runtime/bin/file_impl.dart
@@ -2,65 +2,67 @@
// 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.
-class _FileInputStream implements FileInputStream {
+class _FileInputStream implements InputStream {
_FileInputStream(File file) {
_file = file;
}
- bool read(List<int> buffer, int offset, int len, void callback()) {
- int bytesRead = _file.readList(buffer, offset, len);
-
- if (bytesRead == len) {
- if (callback != null) {
- callback();
+ List<int> read([int len]) {
+ int bytesToRead = available();
+ if (bytesToRead == 0) {
+ return null;
+ }
+ if (len != null) {
+ if (len <= 0) {
+ throw new StreamException("Illegal length $len");
+ } else if (bytesToRead > len) {
+ bytesToRead = len;
}
- return true;
+ }
+ List<int> buffer = new List<int>(bytesToRead);
+ int bytesRead = _file.readList(buffer, 0, bytesToRead);
+ if (bytesRead < bytesToRead) {
+ List<int> newBuffer = new List<int>(bytesRead);
+ newBuffer.copyFrom(buffer, 0, 0, bytesRead);
+ return newBuffer;
} else {
- throw "FileInputStream: read error";
- }
- }
-
- // TODO(srdjan): Reading whole file at once does not scale. Implement partial
- // file reading and pattern checks.
- void readUntil(List<int> pattern, void callback(List<int> buffer)) {
- List<int> buffer = new List<int>(_file.length);
- int result = _file.readList(buffer, 0, _file.length);
- if (result > 0) {
- int index = indexOf(buffer, pattern);
- if (index != -1) {
- int resultBufferSize = index + pattern.length;
- List<int> resultBuffer = new List<int>(resultBufferSize);
- resultBuffer.copyFrom(buffer, 0, 0, resultBufferSize);
- callback(resultBuffer);
- }
+ return buffer;
}
}
- // TODO(srdjan: move this method to Lists.dart (helper method).
- static int indexOf(List<int> buffer, List<int> pattern) {
- if (pattern.length == 0) {
- return buffer.length;
- }
- int len = buffer.length - pattern.length + 1;
- for (int index = 0; index < len; index++) {
- bool match = true;
- for (int k = 0; k < pattern.length; k++) {
- if (buffer[index + k] != pattern[k]) {
- match = false;
- break;
- }
- }
- if (match) {
- return index;
- }
- }
- return -1;
+ int readInto(List<int> buffer, int offset, int len) {
+ if (offset == null) offset = 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");
+ return _file.readList(buffer, offset, len);
+ }
+
+ int available() {
+ return _file.length - _file.position;
+ }
+
+ bool closed() {
+ _file.position == _file.length;
+ }
+
+ void set dataHandler(void callback()) {
+ // TODO(sgjesse): How to handle this?
+ }
+
+ void set closeHandler(void callback()) {
+ // TODO(sgjesse): How to handle this?
+ }
+
+ void set errorHandler(void callback()) {
+ // TODO(sgjesse): How to handle this?
}
File _file;
}
-class _FileOutputStream implements FileOutputStream {
+
+class _FileOutputStream implements OutputStream {
_FileOutputStream(File file) {
_file = file;
}
@@ -78,6 +80,7 @@ class _FileOutputStream implements FileOutputStream {
File _file;
}
+
// Class for encapsulating the native implementation of files.
class _File extends FileNativeWrapper implements File {
// Constructor for file.
@@ -197,8 +200,8 @@ class _File extends FileNativeWrapper implements File {
// Each file has an unique InputStream.
InputStream get inputStream() {
- if (_inputStream === null) {
- _inputStream = new FileInputStream(this);
+ if (_inputStream == null) {
+ _inputStream = new _FileInputStream(this);
}
return _inputStream;
}
@@ -208,8 +211,8 @@ class _File extends FileNativeWrapper implements File {
if (!_writeable) {
throw "File is not writable";
}
- if (_outputStream === null) {
- _outputStream = new FileOutputStream(this);
+ if (_outputStream == null) {
+ _outputStream = new _FileOutputStream(this);
}
return _outputStream;
}
« no previous file with comments | « runtime/bin/file.dart ('k') | runtime/bin/input_stream.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698