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

Unified Diff: sdk/lib/_collection_dev/to_string.dart

Issue 26481002: Change the toString method of IterableBase/IterableMixin to show some elements. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed comments. Created 7 years, 2 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
« no previous file with comments | « sdk/lib/_collection_dev/collection_dev_sources.gypi ('k') | sdk/lib/collection/hash_set.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/_collection_dev/to_string.dart
diff --git a/sdk/lib/_collection_dev/to_string.dart b/sdk/lib/_collection_dev/to_string.dart
deleted file mode 100644
index e1ff05d55df99e96e742540ac3099bb3bf35d0a3..0000000000000000000000000000000000000000
--- a/sdk/lib/_collection_dev/to_string.dart
+++ /dev/null
@@ -1,161 +0,0 @@
-// Copyright (c) 2013, 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.
-
-part of dart._collection.dev;
-
-/**
- * Temporary move `toString` methods into this class.
- */
-class ToString {
- // TODO(jjb): visiting list should be an identityHashSet when it exists
-
- /**
- * Returns a string representing the specified iterable. If the
- * iterable is a [List], the returned string looks like this:
- * [:'[element0, element1, ... elementN]':]. The value returned by its
- * [toString] method is used to represent each element. If the specified
- * iterable is not a list, the returned string looks like this:
- * [:{element0, element1, ... elementN}:]. In other words, the strings
- * returned for lists are surrounded by square brackets, while the strings
- * returned for other iterables are surrounded by curly braces.
- *
- * If the specified iterable contains a reference to itself, either
- * directly or indirectly through other iterables or maps, the contained
- * reference is rendered as [:'[...]':] if it is a list, or [:'{...}':] if
- * it is not. This prevents the infinite regress that would otherwise occur.
- * So, for example, calling this method on a list whose sole element is a
- * reference to itself would return [:'[[...]]':].
- *
- * A typical implementation of a iterable's [toString] method will
- * simply return the results of this method applied to the iterable.
- */
- static String iterableToString(Iterable i) {
- var result = new StringBuffer();
- _emitValue(i, result, new List());
- return result.toString();
- }
-
- /**
- * Appends a string representing the specified iterable to the specified
- * string buffer. The string is formatted as per [iterableToString].
- * The [:visiting:] list contains references to all of the enclosing
- * iterables 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 [_emitMap] to identify recursive iterables
- * and maps.
- */
- static void _emitValue(Iterable i,
- StringBuffer result,
- List visiting) {
- visiting.add(i);
- bool isList = i is List;
- result.write(isList ? '[' : '{');
-
- bool first = true;
- for (var e in i) {
- if (!first) {
- result.write(', ');
- }
- first = false;
- _emitObject(e, result, visiting);
- }
-
- result.write(isList ? ']' : '}');
- visiting.removeLast();
- }
-
- /**
- * Appends a string representing the specified object to the specified
- * string buffer. If the object is a [iterable] or [Map], it is formatted
- * as per [iterableToString] or [mapToString]; otherwise, it is formatted
- * by invoking its own [toString] method.
- *
- * 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 _emitObject(Object o, StringBuffer result, List visiting) {
- if (o is Iterable) {
- if (_containsRef(visiting, o)) {
- result.write(o is List ? '[...]' : '{...}');
- } else {
- _emitValue(o, result, visiting);
- }
- } else if (o is Map) {
- if (_containsRef(visiting, o)) {
- result.write('{...}');
- } else {
- _emitPair(o, result, visiting);
- }
- } else { // o is neither a collection nor a map
- result.write(o);
- }
- }
-
- /**
- * Returns true if the specified collection contains the specified object
- * reference.
- */
- static _containsRef(Iterable i, Object ref) {
- for (var e in i) {
- if (identical(e, ref)) return true;
- }
- return false;
- }
-
- /**
- * 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();
- _emitPair(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 _emitPair(Map m, StringBuffer result, List visiting) {
- visiting.add(m);
- result.write('{');
-
- bool first = true;
- m.forEach((k, v) {
- if (!first) {
- result.write(', ');
- }
- first = false;
- _emitObject(k, result, visiting);
- result.write(': ');
- _emitObject(v, result, visiting);
- });
-
- result.write('}');
- visiting.removeLast();
- }
-}
« no previous file with comments | « sdk/lib/_collection_dev/collection_dev_sources.gypi ('k') | sdk/lib/collection/hash_set.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698