| Index: runtime/lib/growable_array.dart
|
| diff --git a/runtime/lib/growable_array.dart b/runtime/lib/growable_array.dart
|
| index 9caad29d2117d2c8a9b1a35bf8a3e650bcda2a29..9f9fc82ea55c5f1bcaabac4f6eba2320d36ee570 100644
|
| --- a/runtime/lib/growable_array.dart
|
| +++ b/runtime/lib/growable_array.dart
|
| @@ -131,8 +131,8 @@ class _GrowableObjectArray<T> implements List<T> {
|
| add(element);
|
| }
|
|
|
| - void addAll(Collection<T> collection) {
|
| - for (T elem in collection) {
|
| + void addAll(Iterable<T> iterable) {
|
| + for (T elem in iterable) {
|
| add(elem);
|
| }
|
| }
|
| @@ -146,13 +146,25 @@ class _GrowableObjectArray<T> implements List<T> {
|
| }
|
|
|
| T get first {
|
| - return this[0];
|
| + if (length > 0) return this[0];
|
| + throw new StateError("No elements");
|
| }
|
|
|
| T get last {
|
| - return this[length - 1];
|
| + if (length > 0) return this[length - 1];
|
| + throw new StateError("No elements");
|
| }
|
|
|
| + T get single {
|
| + if (length == 1) return this[0];
|
| + if (length == 0) throw new StateError("No elements");
|
| + throw new StateError("More than one element");
|
| + }
|
| +
|
| + T min([int compare(T a, T b)]) => Collections.min(this, compare);
|
| +
|
| + T max([int compare(T a, T b)]) => Collections.max(this, compare);
|
| +
|
| int indexOf(T element, [int start = 0]) {
|
| return Arrays.indexOf(this, element, start, length);
|
| }
|
| @@ -172,7 +184,9 @@ class _GrowableObjectArray<T> implements List<T> {
|
|
|
| // Collection interface.
|
|
|
| - bool contains(T element) => Collections.contains(this, element);
|
| + bool contains(T element) {
|
| + return Collections.contains(this, element);
|
| + }
|
|
|
| void forEach(f(T element)) {
|
| // TODO(srdjan): Use Collections.forEach(this, f);
|
| @@ -182,25 +196,74 @@ class _GrowableObjectArray<T> implements List<T> {
|
| }
|
| }
|
|
|
| - Collection map(f(T element)) {
|
| - return Collections.map(this,
|
| - new _GrowableObjectArray.withCapacity(length), f);
|
| + String join([String separator]) {
|
| + if (isEmpty) return "";
|
| + if (this.length == 1) return "${this[0]}";
|
| + StringBuffer buffer = new StringBuffer();
|
| + if (separator == null || separator == "") {
|
| + for (int i = 0; i < this.length; i++) {
|
| + buffer.add("${this[i]}");
|
| + }
|
| + } else {
|
| + buffer.add("${this[0]}");
|
| + for (int i = 1; i < this.length; i++) {
|
| + buffer.add(separator);
|
| + buffer.add("${this[i]}");
|
| + }
|
| + }
|
| + return buffer.toString();
|
| + }
|
| +
|
| + List mappedBy(f(T element)) {
|
| + return new MappedList<T, dynamic>(this, f);
|
| }
|
|
|
| reduce(initialValue, combine(previousValue, T element)) {
|
| return Collections.reduce(this, initialValue, combine);
|
| }
|
|
|
| - Collection<T> filter(bool f(T element)) {
|
| - return Collections.filter(this, new _GrowableObjectArray<T>(), f);
|
| + Iterable<T> where(bool f(T element)) {
|
| + return new WhereIterable<T>(this, f);
|
| + }
|
| +
|
| + List<T> take(int n) {
|
| + return new ListView<T>(this, 0, n);
|
| + }
|
| +
|
| + Iterable<T> takeWhile(bool test(T value)) {
|
| + return new TakeWhileIterable<T>(this, test);
|
| + }
|
| +
|
| + List<T> skip(int n) {
|
| + return new ListView<T>(this, n, null);
|
| + }
|
| +
|
| + Iterable<T> skipWhile(bool test(T value)) {
|
| + return new SkipWhileIterable<T>(this, test);
|
| }
|
|
|
| bool every(bool f(T element)) {
|
| return Collections.every(this, f);
|
| }
|
|
|
| - bool some(bool f(T element)) {
|
| - return Collections.some(this, f);
|
| + bool any(bool f(T element)) {
|
| + return Collections.any(this, f);
|
| + }
|
| +
|
| + T firstMatching(bool test(T value), {T orElse()}) {
|
| + return Collections.firstMatching(this, test, orElse);
|
| + }
|
| +
|
| + T lastMatching(bool test(T value), {T orElse()}) {
|
| + return Collections.lastMatchingInList(this, test, orElse);
|
| + }
|
| +
|
| + T singleMatching(bool test(T value)) {
|
| + return Collections.singleMatching(this, test);
|
| + }
|
| +
|
| + T elementAt(int index) {
|
| + return this[index];
|
| }
|
|
|
| bool get isEmpty {
|
| @@ -220,7 +283,15 @@ class _GrowableObjectArray<T> implements List<T> {
|
| return Collections.collectionToString(this);
|
| }
|
|
|
| - Iterator<T> iterator() {
|
| - return new SequenceIterator<T>(this);
|
| + Iterator<T> get iterator {
|
| + return new ListIterator<T>(this);
|
| + }
|
| +
|
| + List<T> toList() {
|
| + return new List<T>.from(this);
|
| + }
|
| +
|
| + Set<T> toSet() {
|
| + return new Set<T>.from(this);
|
| }
|
| }
|
|
|