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

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

Issue 211283003: More efficient _OneByteString.toLowerCase(). (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 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, 0xff,
Lasse Reichstein Nielsen 2014/03/25 16:35:37 ff -> df
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 toLowerCase() {
818 upperCaseDetected: {
srdjan 2014/03/25 17:33:16 Using label and breaks here looks gross, IMO. Why
Lasse Reichstein Nielsen 2014/03/25 19:04:27 Just me microoptimizing. On the test I used, it g
819 for (int i = 0; i < this.length; i++) {
820 int c = this.codeUnitAt(i);
821 // Ranges: 0x41-0x5a ('A' - 'Z'), 0xc0-0xd6, 0xd8-0xde.
822 if (c != _LC_TABLE[c]) {
823 break upperCaseDetected;
824 }
825 }
826 return this;
827 }
828 // String contains upper case characters. Create a new string.
829 var result = _allocate(this.length);
830 for (int i = 0; i < this.length; i++) {
831 result._setAt(i, _LC_TABLE[this.codeUnitAt(i)]);
832 }
833 return result;
sra1 2014/03/25 19:07:14 Are single character strings canonicalized (like i
834 }
835
781 // Allocates a string of given length, expecting its content to be 836 // Allocates a string of given length, expecting its content to be
782 // set using _setAt. 837 // set using _setAt.
783 static _OneByteString _allocate(int length) native "OneByteString_allocate"; 838 static _OneByteString _allocate(int length) native "OneByteString_allocate";
784 839
785 840
786 static _OneByteString _allocateFromOneByteList(List<int> list) 841 static _OneByteString _allocateFromOneByteList(List<int> list)
787 native "OneByteString_allocateFromOneByteList"; 842 native "OneByteString_allocateFromOneByteList";
788 843
789 // This is internal helper method. Code point value must be a valid 844 // This is internal helper method. Code point value must be a valid
790 // Latin1 value (0..0xFF), index must be valid. 845 // 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>, 936 class _CodeUnits extends Object with ListMixin<int>,
882 UnmodifiableListMixin<int> { 937 UnmodifiableListMixin<int> {
883 /** The string that this is the code units of. */ 938 /** The string that this is the code units of. */
884 String _string; 939 String _string;
885 940
886 _CodeUnits(this._string); 941 _CodeUnits(this._string);
887 942
888 int get length => _string.length; 943 int get length => _string.length;
889 int operator[](int i) => _string.codeUnitAt(i); 944 int operator[](int i) => _string.codeUnitAt(i);
890 } 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