Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 part of serialization; | 5 part of serialization; |
| 6 | 6 |
| 7 // TODO(alanknight): Figure out how to reasonably separate out the things | 7 // TODO(alanknight): Figure out how to reasonably separate out the things |
| 8 // that require reflection without making the API more awkward. Or if that is | 8 // that require reflection without making the API more awkward. Or if that is |
| 9 // in fact necessary. Maybe the tree-shaking will just remove it if unused. | 9 // in fact necessary. Maybe the tree-shaking will just remove it if unused. |
| 10 | 10 |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 123 /** | 123 /** |
| 124 * Configure this instance to use lists accessing fields by index as its | 124 * Configure this instance to use lists accessing fields by index as its |
| 125 * output. Instances can either produce maps or lists. The list representation | 125 * output. Instances can either produce maps or lists. The list representation |
| 126 * is much more compact and used by default. The map representation is | 126 * is much more compact and used by default. The map representation is |
| 127 * much easier to debug. The default is to use lists. | 127 * much easier to debug. The default is to use lists. |
| 128 */ | 128 */ |
| 129 configureForLists() { | 129 configureForLists() { |
| 130 useMaps = false; | 130 useMaps = false; |
| 131 } | 131 } |
| 132 | 132 |
| 133 /** Create either a list or a map to hold the object's state, depending | 133 /** |
| 134 * Create either a list or a map to hold the object's state, depending | |
| 134 * on the [useMaps] variable. If using a Map, we wrap it in order to keep | 135 * on the [useMaps] variable. If using a Map, we wrap it in order to keep |
| 135 * the protocol compatible. See [configureForLists]/[configureForMaps]. | 136 * the protocol compatible. See [configureForLists]/[configureForMaps]. |
| 137 * | |
| 138 * The list need to be growable for SimpleJson format to work. | |
|
floitsch
2013/02/26 13:54:19
If a list is returned, it is growable.
| |
| 136 */ | 139 */ |
| 137 createStateHolder() => | 140 createStateHolder() => |
| 138 useMaps ? new _MapWrapper(fields.contents) : new List(fields.length); | 141 useMaps ? new _MapWrapper(fields.contents) |
|
floitsch
2013/02/26 13:54:19
I would prefer an 'if', and the length-assignment
| |
| 142 : (new List()..length = fields.length); | |
| 139 | 143 |
| 140 /** | 144 /** |
| 141 * Wrap the state if it's passed in as a map, and if the keys are references, | 145 * Wrap the state if it's passed in as a map, and if the keys are references, |
| 142 * resolve them to the strings we expect. We leave the previous keys in there | 146 * resolve them to the strings we expect. We leave the previous keys in there |
| 143 * as well, as they shouldn't be harmful, and it costs more to remove them. | 147 * as well, as they shouldn't be harmful, and it costs more to remove them. |
| 144 */ | 148 */ |
| 145 makeIndexableByNumber(state) { | 149 makeIndexableByNumber(state) { |
| 146 if (!(state is Map)) return state; | 150 if (!(state is Map)) return state; |
| 147 // TODO(alanknight): This is quite inefficient, and we do it twice per | 151 // TODO(alanknight): This is quite inefficient, and we do it twice per |
| 148 // instance. If the keys are references, we need to turn them into strings | 152 // instance. If the keys are references, we need to turn them into strings |
| (...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 623 _MapWrapper(this.fieldList) : _map = new Map(); | 627 _MapWrapper(this.fieldList) : _map = new Map(); |
| 624 _MapWrapper.fromMap(this._map, this.fieldList); | 628 _MapWrapper.fromMap(this._map, this.fieldList); |
| 625 | 629 |
| 626 operator [](key) => _map[fieldList[key].name]; | 630 operator [](key) => _map[fieldList[key].name]; |
| 627 | 631 |
| 628 operator []=(key, value) { _map[fieldList[key].name] = value; } | 632 operator []=(key, value) { _map[fieldList[key].name] = value; } |
| 629 get length => _map.length; | 633 get length => _map.length; |
| 630 | 634 |
| 631 asMap() => _map; | 635 asMap() => _map; |
| 632 } | 636 } |
| OLD | NEW |