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

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

Issue 212163005: Speed up toLowerCase, by manually inlining the upper-case part. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 9 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 | no next file » | 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 761 matching lines...) Expand 10 before | Expand all | Expand 10 after
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. 781 // Lower-case conversion table for Latin-1.
782 // Upper-case ranges: 0x41-0x5a ('A' - 'Z'), 0xc0-0xd6, 0xd8-0xde.
783 // Conversion to lower case performed by adding 0x20.
782 static const _LC_TABLE = const [ 784 static const _LC_TABLE = const [
783 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 785 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
784 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 786 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
785 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 787 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
786 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 788 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
787 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 789 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
788 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 790 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
789 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 791 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
790 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 792 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
791 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 793 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
(...skipping 15 matching lines...) Expand all
807 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 809 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
808 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 810 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
809 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xd7, 811 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xd7,
810 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf, 812 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf,
811 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 813 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
812 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 814 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
813 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 815 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
814 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 816 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
815 ]; 817 ];
816 818
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() { 819 String toLowerCase() {
833 for (int i = 0; i < this.length; i++) { 820 for (int i = 0; i < this.length; i++) {
834 final c = this.codeUnitAt(i); 821 final c = this.codeUnitAt(i);
835 // Ranges: 0x41-0x5a ('A' - 'Z'), 0xc0-0xd6, 0xd8-0xde. 822 if (c == _LC_TABLE[c]) continue;
836 if (c != _LC_TABLE[c]) { 823 // Upper-case character found.
837 return _toLowerCaseUpperCaseDetectedAt(i); 824 final result = _allocate(this.length);
825 for (int j = 0; j < i; j++) {
826 result._setAt(j, this.codeUnitAt(j));
838 } 827 }
828 for (int j = i; j < this.length; j++) {
829 result._setAt(j, _LC_TABLE[this.codeUnitAt(j)]);
830 }
831 return result;
839 } 832 }
840 return this; 833 return this;
841 } 834 }
842 835
843 // Allocates a string of given length, expecting its content to be 836 // Allocates a string of given length, expecting its content to be
844 // set using _setAt. 837 // set using _setAt.
845 static _OneByteString _allocate(int length) native "OneByteString_allocate"; 838 static _OneByteString _allocate(int length) native "OneByteString_allocate";
846 839
847 840
848 static _OneByteString _allocateFromOneByteList(List<int> list) 841 static _OneByteString _allocateFromOneByteList(List<int> list)
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
943 class _CodeUnits extends Object with ListMixin<int>, 936 class _CodeUnits extends Object with ListMixin<int>,
944 UnmodifiableListMixin<int> { 937 UnmodifiableListMixin<int> {
945 /** The string that this is the code units of. */ 938 /** The string that this is the code units of. */
946 String _string; 939 String _string;
947 940
948 _CodeUnits(this._string); 941 _CodeUnits(this._string);
949 942
950 int get length => _string.length; 943 int get length => _string.length;
951 int operator[](int i) => _string.codeUnitAt(i); 944 int operator[](int i) => _string.codeUnitAt(i);
952 } 945 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698