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

Side by Side Diff: runtime/lib/string_patch.dart

Issue 209443005: Add optimized _OneByteString.toLowerCase. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix test. Created 6 years, 8 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
« no previous file with comments | « no previous file | sdk/lib/io/http_parser.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 patch class String { 5 patch class String {
6 /* patch */ factory String.fromCharCodes(Iterable<int> charCodes) { 6 /* patch */ factory String.fromCharCodes(Iterable<int> charCodes) {
7 return _StringBase.createFromCharCodes(charCodes); 7 return _StringBase.createFromCharCodes(charCodes);
8 } 8 }
9 9
10 /* patch */ const factory String.fromEnvironment(String name, 10 /* patch */ const factory String.fromEnvironment(String name,
(...skipping 760 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 } else { 771 } else {
772 for (int i = 0; i < delta; i++) { 772 for (int i = 0; i < delta; i++) {
773 for (int j = 0; j < padLength; j++) { 773 for (int j = 0; j < padLength; j++) {
774 result._setAt(index++, padding.codeUnitAt(j)); 774 result._setAt(index++, padding.codeUnitAt(j));
775 } 775 }
776 } 776 }
777 } 777 }
778 return result; 778 return result;
779 } 779 }
780 780
781 // Lower-case conversion table for Latin-1.
782 static const _LC_TABLE = const [
783 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
784 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
785 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
786 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
787 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
788 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
789 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
790 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
791 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
792 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
793 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
794 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
795 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
796 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
797 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
798 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
799 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
800 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
801 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
802 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
803 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
804 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
805 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
806 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
807 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
808 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
809 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xd7,
810 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf,
811 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
812 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
813 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
814 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
815 ];
816
817 String _toLowerCaseUpperCaseDetectedAt(int firstUpperCaseIndex) {
818 // String contains upper case characters. Create a new string.
819 final length = this.length;
820 final result = _allocate(length);
821 // First up to firstUpperIndex.
822 int i = 0;
823 for (; i < firstUpperCaseIndex; i++) {
824 result._setAt(i, this.codeUnitAt(i));
825 }
826 for (; i < length; i++) {
827 result._setAt(i, _LC_TABLE[this.codeUnitAt(i)]);
828 }
829 return result;
830 }
831
832 String toLowerCase() {
833 for (int i = 0; i < this.length; i++) {
834 final c = this.codeUnitAt(i);
835 // Ranges: 0x41-0x5a ('A' - 'Z'), 0xc0-0xd6, 0xd8-0xde.
836 if (c != _LC_TABLE[c]) {
837 return _toLowerCaseUpperCaseDetectedAt(i);
838 }
839 }
840 return this;
841 }
842
781 // Allocates a string of given length, expecting its content to be 843 // Allocates a string of given length, expecting its content to be
782 // set using _setAt. 844 // set using _setAt.
783 static _OneByteString _allocate(int length) native "OneByteString_allocate"; 845 static _OneByteString _allocate(int length) native "OneByteString_allocate";
784 846
785 847
786 static _OneByteString _allocateFromOneByteList(List<int> list) 848 static _OneByteString _allocateFromOneByteList(List<int> list)
787 native "OneByteString_allocateFromOneByteList"; 849 native "OneByteString_allocateFromOneByteList";
788 850
789 // This is internal helper method. Code point value must be a valid 851 // This is internal helper method. Code point value must be a valid
790 // Latin1 value (0..0xFF), index must be valid. 852 // Latin1 value (0..0xFF), index must be valid.
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
881 class _CodeUnits extends Object with ListMixin<int>, 943 class _CodeUnits extends Object with ListMixin<int>,
882 UnmodifiableListMixin<int> { 944 UnmodifiableListMixin<int> {
883 /** The string that this is the code units of. */ 945 /** The string that this is the code units of. */
884 String _string; 946 String _string;
885 947
886 _CodeUnits(this._string); 948 _CodeUnits(this._string);
887 949
888 int get length => _string.length; 950 int get length => _string.length;
889 int operator[](int i) => _string.codeUnitAt(i); 951 int operator[](int i) => _string.codeUnitAt(i);
890 } 952 }
OLDNEW
« no previous file with comments | « no previous file | sdk/lib/io/http_parser.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698