| Index: corelib/src/implementation/maps.dart
|
| ===================================================================
|
| --- corelib/src/implementation/maps.dart (revision 4412)
|
| +++ corelib/src/implementation/maps.dart (working copy)
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
| +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| // for details. All rights reserved. Use of this source code is governed by a
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
| @@ -59,4 +59,55 @@
|
| static int length(Map map) => map.getKeys().length;
|
|
|
| static bool isEmpty(Map map) => length(map) == 0;
|
| +
|
| + /**
|
| + * Returns a string representing the specified map. The returned string
|
| + * looks like this: [:'{key0: value0, key1: value1, ... keyN: valueN}':].
|
| + * The value returned by its [toString] method is used to represent each
|
| + * key or value.
|
| + *
|
| + * If the map collection contains a reference to itself, either
|
| + * directly as a key or value, or indirectly through other collections
|
| + * or maps, the contained reference is rendered as [:'{...}':]. This
|
| + * prevents the infinite regress that would otherwise occur. So, for example,
|
| + * calling this method on a map whose sole entry maps the string key 'me'
|
| + * to a reference to the map would return [:'{me: {...}}':].
|
| + *
|
| + * A typical implementation of a map's [toString] method will
|
| + * simply return the results of this method applied to the collection.
|
| + */
|
| + static String mapToString(Map m) {
|
| + var result = new StringBuffer();
|
| + _emitMap(m, result, new List());
|
| + return result.toString();
|
| + }
|
| +
|
| + /**
|
| + * Appends a string representing the specified map to the specified
|
| + * string buffer. The string is formatted as per [mapToString].
|
| + * The [:visiting:] list contains references to all of the enclosing
|
| + * collections and maps (which are currently in the process of being
|
| + * emitted into [:result:]). The [:visiting:] parameter allows this method
|
| + * to generate a [:'[...]':] or [:'{...}':] where required. In other words,
|
| + * it allows this method and [_emitCollection] to identify recursive maps
|
| + * and collections.
|
| + */
|
| + static void _emitMap(Map m, StringBuffer result, List visiting) {
|
| + visiting.add(m);
|
| + result.add('{');
|
| +
|
| + bool first = true;
|
| + m.forEach((k, v) {
|
| + if (!first) {
|
| + result.add(', ');
|
| + }
|
| + first = false;
|
| + Collections._emitObject(k, result, visiting);
|
| + result.add(': ');
|
| + Collections._emitObject(v, result, visiting);
|
| + });
|
| +
|
| + result.add('}');
|
| + visiting.removeLast();
|
| + }
|
| }
|
|
|