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

Side by Side Diff: sdk/lib/io/file_impl.dart

Issue 1320023008: Refactor the io resource classes (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: address comments Created 5 years, 3 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
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 part of dart.io; 5 part of dart.io;
6 6
7 // Read the file in blocks of size 64k. 7 // Read the file in blocks of size 64k.
8 const int _BLOCK_SIZE = 64 * 1024; 8 const int _BLOCK_SIZE = 64 * 1024;
9 9
10 10
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 } 625 }
626 _id = id; 626 _id = id;
627 _maybePerformCleanup(); 627 _maybePerformCleanup();
628 } 628 }
629 629
630 Future<int> readByte() { 630 Future<int> readByte() {
631 return _dispatch(_FILE_READ_BYTE, [_id]).then((response) { 631 return _dispatch(_FILE_READ_BYTE, [_id]).then((response) {
632 if (_isErrorResponse(response)) { 632 if (_isErrorResponse(response)) {
633 throw _exceptionFromResponse(response, "readByte failed", path); 633 throw _exceptionFromResponse(response, "readByte failed", path);
634 } 634 }
635 _resourceInfo.readCount++; 635 _resourceInfo.addRead(1);
636 _resourceInfo.totalRead++;
637 return response; 636 return response;
638 }); 637 });
639 } 638 }
640 639
641 external static _readByte(int id); 640 external static _readByte(int id);
642 641
643 int readByteSync() { 642 int readByteSync() {
644 _checkAvailable(); 643 _checkAvailable();
645 var result = _readByte(_id); 644 var result = _readByte(_id);
646 if (result is OSError) { 645 if (result is OSError) {
647 throw new FileSystemException("readByte failed", path, result); 646 throw new FileSystemException("readByte failed", path, result);
648 } 647 }
649 _resourceInfo.readCount++; 648 _resourceInfo.addRead(1);
650 _resourceInfo.totalRead++;
651 return result; 649 return result;
652 } 650 }
653 651
654 Future<List<int>> read(int bytes) { 652 Future<List<int>> read(int bytes) {
655 if (bytes is !int) { 653 if (bytes is !int) {
656 throw new ArgumentError(bytes); 654 throw new ArgumentError(bytes);
657 } 655 }
658 return _dispatch(_FILE_READ, [_id, bytes]).then((response) { 656 return _dispatch(_FILE_READ, [_id, bytes]).then((response) {
659 if (_isErrorResponse(response)) { 657 if (_isErrorResponse(response)) {
660 throw _exceptionFromResponse(response, "read failed", path); 658 throw _exceptionFromResponse(response, "read failed", path);
661 } 659 }
662 _resourceInfo.readCount++; 660 _resourceInfo.addRead(response[1].length);
663 _resourceInfo.totalRead += response[1].length;
664 return response[1]; 661 return response[1];
665 }); 662 });
666 } 663 }
667 664
668 external static _read(int id, int bytes); 665 external static _read(int id, int bytes);
669 666
670 List<int> readSync(int bytes) { 667 List<int> readSync(int bytes) {
671 _checkAvailable(); 668 _checkAvailable();
672 if (bytes is !int) { 669 if (bytes is !int) {
673 throw new ArgumentError(bytes); 670 throw new ArgumentError(bytes);
674 } 671 }
675 var result = _read(_id, bytes); 672 var result = _read(_id, bytes);
676 if (result is OSError) { 673 if (result is OSError) {
677 throw new FileSystemException("readSync failed", path, result); 674 throw new FileSystemException("readSync failed", path, result);
678 } 675 }
679 _resourceInfo.readCount++; 676 _resourceInfo.addRead(result.length);
680 _resourceInfo.totalRead += result.length;
681 return result; 677 return result;
682 } 678 }
683 679
684 Future<int> readInto(List<int> buffer, [int start = 0, int end]) { 680 Future<int> readInto(List<int> buffer, [int start = 0, int end]) {
685 if (buffer is !List || 681 if (buffer is !List ||
686 (start != null && start is !int) || 682 (start != null && start is !int) ||
687 (end != null && end is !int)) { 683 (end != null && end is !int)) {
688 throw new ArgumentError(); 684 throw new ArgumentError();
689 } 685 }
690 end = RangeError.checkValidRange(start, end, buffer.length); 686 end = RangeError.checkValidRange(start, end, buffer.length);
691 if (end == start) return new Future.value(0); 687 if (end == start) return new Future.value(0);
692 int length = end - start; 688 int length = end - start;
693 return _dispatch(_FILE_READ_INTO, [_id, length]).then((response) { 689 return _dispatch(_FILE_READ_INTO, [_id, length]).then((response) {
694 if (_isErrorResponse(response)) { 690 if (_isErrorResponse(response)) {
695 throw _exceptionFromResponse(response, "readInto failed", path); 691 throw _exceptionFromResponse(response, "readInto failed", path);
696 } 692 }
697 var read = response[1]; 693 var read = response[1];
698 var data = response[2]; 694 var data = response[2];
699 buffer.setRange(start, start + read, data); 695 buffer.setRange(start, start + read, data);
700 _resourceInfo.readCount++; 696 _resourceInfo.addRead(read);
701 _resourceInfo.totalRead += read;
702 return read; 697 return read;
703 }); 698 });
704 } 699 }
705 700
706 external static _readInto(int id, List<int> buffer, int start, int end); 701 external static _readInto(int id, List<int> buffer, int start, int end);
707 702
708 int readIntoSync(List<int> buffer, [int start = 0, int end]) { 703 int readIntoSync(List<int> buffer, [int start = 0, int end]) {
709 _checkAvailable(); 704 _checkAvailable();
710 if (buffer is !List || 705 if (buffer is !List ||
711 (start != null && start is !int) || 706 (start != null && start is !int) ||
712 (end != null && end is !int)) { 707 (end != null && end is !int)) {
713 throw new ArgumentError(); 708 throw new ArgumentError();
714 } 709 }
715 end = RangeError.checkValidRange(start, end, buffer.length); 710 end = RangeError.checkValidRange(start, end, buffer.length);
716 if (end == start) return 0; 711 if (end == start) return 0;
717 var result = _readInto(_id, buffer, start, end); 712 var result = _readInto(_id, buffer, start, end);
718 if (result is OSError) { 713 if (result is OSError) {
719 throw new FileSystemException("readInto failed", path, result); 714 throw new FileSystemException("readInto failed", path, result);
720 } 715 }
721 _resourceInfo.readCount++; 716 _resourceInfo.addRead(result);
722 _resourceInfo.totalRead += result;
723 return result; 717 return result;
724 } 718 }
725 719
726 Future<RandomAccessFile> writeByte(int value) { 720 Future<RandomAccessFile> writeByte(int value) {
727 if (value is !int) { 721 if (value is !int) {
728 throw new ArgumentError(value); 722 throw new ArgumentError(value);
729 } 723 }
730 return _dispatch(_FILE_WRITE_BYTE, [_id, value]).then((response) { 724 return _dispatch(_FILE_WRITE_BYTE, [_id, value]).then((response) {
731 if (_isErrorResponse(response)) { 725 if (_isErrorResponse(response)) {
732 throw _exceptionFromResponse(response, "writeByte failed", path); 726 throw _exceptionFromResponse(response, "writeByte failed", path);
733 } 727 }
734 _resourceInfo.writeCount++; 728 _resourceInfo.addWrite(1);
735 _resourceInfo.totalWritten++;
736 return this; 729 return this;
737 }); 730 });
738 } 731 }
739 732
740 external static _writeByte(int id, int value); 733 external static _writeByte(int id, int value);
741 734
742 int writeByteSync(int value) { 735 int writeByteSync(int value) {
743 _checkAvailable(); 736 _checkAvailable();
744 if (value is !int) { 737 if (value is !int) {
745 throw new ArgumentError(value); 738 throw new ArgumentError(value);
746 } 739 }
747 var result = _writeByte(_id, value); 740 var result = _writeByte(_id, value);
748 if (result is OSError) { 741 if (result is OSError) {
749 throw new FileSystemException("writeByte failed", path, result); 742 throw new FileSystemException("writeByte failed", path, result);
750 } 743 }
751 _resourceInfo.writeCount++; 744 _resourceInfo.addWrite(1);
752 _resourceInfo.totalWritten++;
753 return result; 745 return result;
754 } 746 }
755 747
756 Future<RandomAccessFile> writeFrom( 748 Future<RandomAccessFile> writeFrom(
757 List<int> buffer, [int start = 0, int end]) { 749 List<int> buffer, [int start = 0, int end]) {
758 if ((buffer is !List) || 750 if ((buffer is !List) ||
759 (start != null && start is !int) || 751 (start != null && start is !int) ||
760 (end != null && end is !int)) { 752 (end != null && end is !int)) {
761 throw new ArgumentError("Invalid arguments to writeFrom"); 753 throw new ArgumentError("Invalid arguments to writeFrom");
762 } 754 }
763 end = RangeError.checkValidRange(start, end, buffer.length); 755 end = RangeError.checkValidRange(start, end, buffer.length);
764 if (end == start) return new Future.value(this); 756 if (end == start) return new Future.value(this);
765 _BufferAndStart result; 757 _BufferAndStart result;
766 try { 758 try {
767 result = _ensureFastAndSerializableByteData(buffer, start, end); 759 result = _ensureFastAndSerializableByteData(buffer, start, end);
768 } catch (e) { 760 } catch (e) {
769 return new Future.error(e); 761 return new Future.error(e);
770 } 762 }
771 763
772 List request = new List(4); 764 List request = new List(4);
773 request[0] = _id; 765 request[0] = _id;
774 request[1] = result.buffer; 766 request[1] = result.buffer;
775 request[2] = result.start; 767 request[2] = result.start;
776 request[3] = end - (start - result.start); 768 request[3] = end - (start - result.start);
777 return _dispatch(_FILE_WRITE_FROM, request).then((response) { 769 return _dispatch(_FILE_WRITE_FROM, request).then((response) {
778 if (_isErrorResponse(response)) { 770 if (_isErrorResponse(response)) {
779 throw _exceptionFromResponse(response, "writeFrom failed", path); 771 throw _exceptionFromResponse(response, "writeFrom failed", path);
780 } 772 }
781 _resourceInfo.writeCount++; 773 _resourceInfo.addWrite(end - (start - result.start));
782 _resourceInfo.totalWritten += end - (start - result.start);
783 return this; 774 return this;
784 }); 775 });
785 } 776 }
786 777
787 external static _writeFrom(int id, List<int> buffer, int start, int end); 778 external static _writeFrom(int id, List<int> buffer, int start, int end);
788 779
789 void writeFromSync(List<int> buffer, [int start = 0, int end]) { 780 void writeFromSync(List<int> buffer, [int start = 0, int end]) {
790 _checkAvailable(); 781 _checkAvailable();
791 if (buffer is !List || 782 if (buffer is !List ||
792 (start != null && start is !int) || 783 (start != null && start is !int) ||
793 (end != null && end is !int)) { 784 (end != null && end is !int)) {
794 throw new ArgumentError("Invalid arguments to writeFromSync"); 785 throw new ArgumentError("Invalid arguments to writeFromSync");
795 } 786 }
796 end = RangeError.checkValidRange(start, end, buffer.length); 787 end = RangeError.checkValidRange(start, end, buffer.length);
797 if (end == start) return; 788 if (end == start) return;
798 _BufferAndStart bufferAndStart = 789 _BufferAndStart bufferAndStart =
799 _ensureFastAndSerializableByteData(buffer, start, end); 790 _ensureFastAndSerializableByteData(buffer, start, end);
800 var result = _writeFrom(_id, 791 var result = _writeFrom(_id,
801 bufferAndStart.buffer, 792 bufferAndStart.buffer,
802 bufferAndStart.start, 793 bufferAndStart.start,
803 end - (start - bufferAndStart.start)); 794 end - (start - bufferAndStart.start));
804 if (result is OSError) { 795 if (result is OSError) {
805 throw new FileSystemException("writeFrom failed", path, result); 796 throw new FileSystemException("writeFrom failed", path, result);
806 } 797 }
807 _resourceInfo.writeCount++; 798 _resourceInfo.addWrite(end - (start - bufferAndStart.start));
808 _resourceInfo.totalWritten += end - (start - bufferAndStart.start);
809 } 799 }
810 800
811 Future<RandomAccessFile> writeString(String string, 801 Future<RandomAccessFile> writeString(String string,
812 {Encoding encoding: UTF8}) { 802 {Encoding encoding: UTF8}) {
813 if (encoding is! Encoding) { 803 if (encoding is! Encoding) {
814 throw new ArgumentError(encoding); 804 throw new ArgumentError(encoding);
815 } 805 }
816 var data = encoding.encode(string); 806 var data = encoding.encode(string);
817 return writeFrom(data, 0, data.length); 807 return writeFrom(data, 0, data.length);
818 } 808 }
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
1029 void _checkAvailable() { 1019 void _checkAvailable() {
1030 if (_asyncDispatched) { 1020 if (_asyncDispatched) {
1031 throw new FileSystemException("An async operation is currently pending", 1021 throw new FileSystemException("An async operation is currently pending",
1032 path); 1022 path);
1033 } 1023 }
1034 if (closed) { 1024 if (closed) {
1035 throw new FileSystemException("File closed", path); 1025 throw new FileSystemException("File closed", path);
1036 } 1026 }
1037 } 1027 }
1038 } 1028 }
OLDNEW
« no previous file with comments | « runtime/observatory/tests/service/tcp_socket_service_test.dart ('k') | sdk/lib/io/io_resource_info.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698