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

Unified Diff: runtime/lib/integers.dart

Issue 518093002: Optimize number-to-string conversions. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 4 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
« runtime/lib/double.dart ('K') | « runtime/lib/double.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/lib/integers.dart
===================================================================
--- runtime/lib/integers.dart (revision 39698)
+++ runtime/lib/integers.dart (working copy)
@@ -293,6 +293,32 @@
0x39, 0x36, 0x39, 0x37, 0x39, 0x38, 0x39, 0x39
];
+ /**
+ * Result of int.toString for -99, -98, ..., 98, 99.
+ */
+ static const _smallLookupTable = const [
+ "-99", "-98", "-97", "-96", "-95", "-94", "-93", "-92", "-91", "-90",
+ "-89", "-88", "-87", "-86", "-85", "-84", "-83", "-82", "-81", "-80",
+ "-79", "-78", "-77", "-76", "-75", "-74", "-73", "-72", "-71", "-70",
+ "-69", "-68", "-67", "-66", "-65", "-64", "-63", "-62", "-61", "-60",
+ "-59", "-58", "-57", "-56", "-55", "-54", "-53", "-52", "-51", "-50",
+ "-49", "-48", "-47", "-46", "-45", "-44", "-43", "-42", "-41", "-40",
+ "-39", "-38", "-37", "-36", "-35", "-34", "-33", "-32", "-31", "-30",
+ "-29", "-28", "-27", "-26", "-25", "-24", "-23", "-22", "-21", "-20",
+ "-19", "-18", "-17", "-16", "-15", "-14", "-13", "-12", "-11", "-10",
+ "-9", "-8", "-7", "-6", "-5", "-4", "-3", "-2", "-1", "0",
+ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
+ "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
+ "21", "22", "23", "24", "25", "26", "27", "28", "29", "30",
+ "31", "32", "33", "34", "35", "36", "37", "38", "39", "40",
+ "41", "42", "43", "44", "45", "46", "47", "48", "49", "50",
+ "51", "52", "53", "54", "55", "56", "57", "58", "59", "60",
+ "61", "62", "63", "64", "65", "66", "67", "68", "69", "70",
+ "71", "72", "73", "74", "75", "76", "77", "78", "79", "80",
+ "81", "82", "83", "84", "85", "86", "87", "88", "89", "90",
+ "91", "92", "93", "94", "95", "96", "97", "98", "99",
Ivan Posva 2014/08/29 20:58:47 Trailing comma.
koda 2014/08/29 21:02:33 Done.
Lasse Reichstein Nielsen 2014/09/01 07:14:21 There isn't anything inherently wrong with a trail
+ ];
+
// Powers of 10 above 1000000 are indistinguishable by eye.
static const int _POW_10_7 = 10000000;
static const int _POW_10_8 = 100000000;
@@ -320,20 +346,12 @@
}
String toString() {
+ if (this < 100 && this > -100) return _smallLookupTable[this + 99];
Lasse Reichstein Nielsen 2014/09/01 07:14:21 Would it make sense to put this after the sign che
if (this < 0) return _negativeToString(this);
// Inspired by Andrei Alexandrescu: "Three Optimization Tips for C++"
// Avoid expensive remainder operation by doing it on more than
// one digit at a time.
const int DIGIT_ZERO = 0x30;
- if (this < 10) {
- return _OneByteString._allocate(1).._setAt(0, DIGIT_ZERO + this);
- }
- if (this < 100) {
- int digitIndex = 2 * this;
- return _OneByteString._allocate(2)
- .._setAt(0, _digitTable[digitIndex])
- .._setAt(1, _digitTable[digitIndex + 1]);
- }
int length = _positiveBase10Length(this);
_OneByteString result = _OneByteString._allocate(length);
int index = length - 1;
« runtime/lib/double.dart ('K') | « runtime/lib/double.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698