| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 library dart2js.tokens.token_map; | |
| 6 | |
| 7 import 'token.dart' show | |
| 8 Token; | |
| 9 | |
| 10 /** | |
| 11 * Key class used in [TokenMap] in which the hash code for a token is based | |
| 12 * on the [charOffset]. | |
| 13 */ | |
| 14 class TokenKey { | |
| 15 final Token token; | |
| 16 TokenKey(this.token); | |
| 17 int get hashCode => token.charOffset; | |
| 18 operator==(other) => other is TokenKey && token == other.token; | |
| 19 } | |
| 20 | |
| 21 /// Map of tokens and the first associated comment. | |
| 22 /* | |
| 23 * This implementation was chosen among several candidates for its space/time | |
| 24 * efficiency by empirical tests of running dartdoc on dartdoc itself. Time | |
| 25 * measurements for the use of [Compiler.commentMap]: | |
| 26 * | |
| 27 * 1) Using [TokenKey] as key (this class): ~80 msec | |
| 28 * 2) Using [TokenKey] as key + storing a separate map in each script: ~120 msec | |
| 29 * 3) Using [Token] as key in a [Map]: ~38000 msec | |
| 30 * 4) Storing comments is new field in [Token]: ~20 msec | |
| 31 * (Abandoned due to the increased memory usage) | |
| 32 * 5) Storing comments in an [Expando]: ~14000 msec | |
| 33 * 6) Storing token/comments pairs in a linked list: ~5400 msec | |
| 34 */ | |
| 35 class TokenMap { | |
| 36 Map<TokenKey,Token> comments = new Map<TokenKey,Token>(); | |
| 37 | |
| 38 Token operator[] (Token key) { | |
| 39 if (key == null) return null; | |
| 40 return comments[new TokenKey(key)]; | |
| 41 } | |
| 42 | |
| 43 void operator[]= (Token key, Token value) { | |
| 44 if (key == null) return; | |
| 45 comments[new TokenKey(key)] = value; | |
| 46 } | |
| 47 } | |
| OLD | NEW |