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

Unified Diff: client/util/CollectionUtils.dart

Issue 9382027: Move client/{base, observable, layout, touch, util, view} to samples/ui_lib . (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 8 years, 10 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 | « client/touch/touch.dart ('k') | client/util/DateUtils.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: client/util/CollectionUtils.dart
===================================================================
--- client/util/CollectionUtils.dart (revision 4144)
+++ client/util/CollectionUtils.dart (working copy)
@@ -1,139 +0,0 @@
-// Copyright (c) 2011, 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.
-
-typedef num NumericValueSelector<T>(T value);
-
-/**
- * General purpose collection utilities.
- * TODO(jmesserly): make these top level functions?
- */
-class CollectionUtils {
-
- static void insertAt(List arr, int pos, value) {
- assert (pos >= 0);
- assert (pos <= arr.length);
-
- if (pos == arr.length) {
- arr.add(value);
- } else {
- // TODO(sigmund): replace this push with a call that ensures capacity
- // (currently not supported in the JS implementation of list). E.g.
- // [: arr.length = arr.length + 1; :]
- arr.add(null);
-
- // shift elements from [pos] (note: arr already has null @ length - 1)
- for (int i = arr.length - 2; i >= pos; i--) {
- arr[i + 1] = arr[i];
- }
- arr[pos] = value;
-
- // TODO(jmesserly): we won't need to do this once List
- // implements insertAt
- if (arr is ObservableList) {
- // TODO(jmesserly): shouldn't need to cast after testing instanceof
- ObservableList obs = arr;
- obs.recordListInsert(pos, value);
- }
- }
- }
-
- // Collection<T> supports most of the ES 5 list methods, but it's missing
- // map.
-
- // TODO(jmesserly): we might want a version of this that return an iterable,
- // however JS, Python and Ruby versions are all eager.
- static List map(Iterable source, var mapper) {
- // TODO(jmesserly): I was trying to set the capacity here, but instead it
- // seems to create a fixed list. Hence assigning by index below.
- List result = new List(source is List ? source.dynamic.length : null);
- int i = 0;
- for (final item in source) {
- result[i++] = mapper(item);
- }
- return result;
- }
-
- /**
- * Finds the item in [source] that matches [test]. Returns null if
- * no item matches. The typing should be:
- * T find(Iterable<T> source, bool test(T item)), but we don't have generic
- * functions.
- */
- static find(Iterable source, bool test(item)) {
- for (final item in source) {
- if (test(item)) return item;
- }
-
- return null;
- }
-
- /** Compute the minimum of an iterable. Returns null if empty. */
- static num min(Iterable source) {
- final iter = source.iterator();
- if (!iter.hasNext()) {
- return null;
- }
- num best = iter.next();
- while (iter.hasNext()) {
- best = Math.min(best, iter.next());
- }
- return best;
- }
-
- /** Compute the maximum of an iterable. Returns null if empty. */
- static num max(Iterable source) {
- final iter = source.iterator();
- if (!iter.hasNext()) {
- return null;
- }
- num best = iter.next();
- while (iter.hasNext()) {
- best = Math.max(best, iter.next());
- }
- return best;
- }
-
- /** Orders an iterable by its values, or by a key selector. */
- static List orderBy(Iterable source, [NumericValueSelector selector = null]) {
- final result = new List.from(source);
- sortBy(result, selector);
- return result;
- }
-
- /** Sorts a list by its values, or by a key selector. */
- // TODO(jmesserly): we probably don't want to call the key selector more than
- // once for a given element. This would improve performance and the API
- // contract could be stronger.
- static void sortBy(List list, [NumericValueSelector selector = null]) {
- if (selector != null) {
- list.sort((x, y) => selector(x) - selector(y));
- } else {
- list.sort((x, y) => x - y);
- }
- }
-
- /** Compute the sum of an iterable. An empty iterable is an error. */
- static num sum(Iterable source, [NumericValueSelector selector = null]) {
- final iter = source.iterator();
- num total = 0;
- if (selector != null) {
- do {
- total += selector(iter.next());
- } while (iter.hasNext());
- } else {
- do {
- total += iter.next();
- } while (iter.hasNext());
- }
- return total;
- }
-
- // TODO(jmesserly): something like should exist on Map, either a method or a
- // constructor, see bug #5340679
- static void copyMap(Map dest, Map source) {
- for (final k in source.getKeys()) {
- dest[k] = source[k];
- }
- }
-}
« no previous file with comments | « client/touch/touch.dart ('k') | client/util/DateUtils.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698