Index: sdk/lib/svg/dart2js/svg_dart2js.dart |
diff --git a/sdk/lib/svg/dart2js/svg_dart2js.dart b/sdk/lib/svg/dart2js/svg_dart2js.dart |
index 5ec3b6eda270e83cfd190a06539669e211b91e47..c05cd565b0b03281551ac3546726552a1e410e32 100644 |
--- a/sdk/lib/svg/dart2js/svg_dart2js.dart |
+++ b/sdk/lib/svg/dart2js/svg_dart2js.dart |
@@ -2797,29 +2797,15 @@ class LengthList implements JavaScriptIndexingBehavior, List<Length> native "*SV |
// From Iterable<Length>: |
- Iterator<Length> iterator() { |
+ Iterator<Length> get iterator { |
// Note: NodeLists are not fixed size. And most probably length shouldn't |
// be cached in both iterator _and_ forEach method. For now caching it |
// for consistency. |
return new FixedSizeListIterator<Length>(this); |
} |
- // From Collection<Length>: |
// SVG Collections expose numberOfItems rather than length. |
int get length => numberOfItems; |
- |
- void add(Length value) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
- void addLast(Length value) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
- void addAll(Collection<Length> collection) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Length)) { |
return Collections.reduce(this, initialValue, combine); |
} |
@@ -2828,17 +2814,60 @@ class LengthList implements JavaScriptIndexingBehavior, List<Length> native "*SV |
void forEach(void f(Length element)) => Collections.forEach(this, f); |
- Collection map(f(Length element)) => Collections.map(this, [], f); |
+ String join([String separator]) => Collections.joinList(this, separator); |
+ |
+ List mappedBy(f(Length element)) => new MappedList<Length, dynamic>(this, f); |
- Collection<Length> filter(bool f(Length element)) => |
- Collections.filter(this, <Length>[], f); |
+ Iterable<Length> where(bool f(Length element)) => new WhereIterable<Length>(this, f); |
bool every(bool f(Length element)) => Collections.every(this, f); |
- bool some(bool f(Length element)) => Collections.some(this, f); |
+ bool any(bool f(Length element)) => Collections.any(this, f); |
bool get isEmpty => this.length == 0; |
+ List<Length> take(int n) => new ListView<Length>(this, 0, n); |
+ |
+ Iterable<Length> takeWhile(bool test(Length value)) { |
+ return new TakeWhileIterable<Length>(this, test); |
+ } |
+ |
+ List<Length> skip(int n) => new ListView<Length>(this, n, null); |
+ |
+ Iterable<Length> skipWhile(bool test(Length value)) { |
+ return new SkipWhileIterable<Length>(this, test); |
+ } |
+ |
+ Length firstMatching(bool test(Length value), { Length orElse() }) { |
+ return Collections.firstMatching(this, test, orElse); |
+ } |
+ |
+ Length lastMatching(bool test(Length value), {Length orElse()}) { |
+ return Collections.lastMatchingInList(this, test, orElse); |
+ } |
+ |
+ Length singleMatching(bool test(Length value)) { |
+ return Collections.singleMatching(this, test); |
+ } |
+ |
+ Length elementAt(int index) { |
+ return this[index]; |
+ } |
+ |
+ // From Collection<Length>: |
+ |
+ void add(Length value) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
+ void addLast(Length value) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
+ void addAll(Iterable<Length> iterable) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
// From List<Length>: |
void set length(int value) { |
throw new UnsupportedError("Cannot resize immutable List."); |
@@ -2858,9 +2887,25 @@ class LengthList implements JavaScriptIndexingBehavior, List<Length> native "*SV |
return Lists.lastIndexOf(this, element, start); |
} |
- Length get first => this[0]; |
+ Length get first { |
+ if (this.length > 0) return this[0]; |
+ throw new StateError("No elements"); |
+ } |
+ |
+ Length get last { |
+ if (this.length > 0) return this[this.length - 1]; |
+ throw new StateError("No elements"); |
+ } |
+ |
+ Length get single { |
+ if (length == 1) return this[0]; |
+ if (length == 0) throw new StateError("No elements"); |
+ throw new StateError("More than one element"); |
+ } |
+ |
+ Length min([int compare(Length a, Length b)]) => _Collections.minInList(this, compare); |
- Length get last => this[length - 1]; |
+ Length max([int compare(Length a, Length b)]) => _Collections.maxInList(this, compare); |
Length removeAt(int pos) { |
throw new UnsupportedError("Cannot removeAt on immutable List."); |
@@ -3323,29 +3368,15 @@ class NumberList implements JavaScriptIndexingBehavior, List<Number> native "*SV |
// From Iterable<Number>: |
- Iterator<Number> iterator() { |
+ Iterator<Number> get iterator { |
// Note: NodeLists are not fixed size. And most probably length shouldn't |
// be cached in both iterator _and_ forEach method. For now caching it |
// for consistency. |
return new FixedSizeListIterator<Number>(this); |
} |
- // From Collection<Number>: |
// SVG Collections expose numberOfItems rather than length. |
int get length => numberOfItems; |
- |
- void add(Number value) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
- void addLast(Number value) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
- void addAll(Collection<Number> collection) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Number)) { |
return Collections.reduce(this, initialValue, combine); |
} |
@@ -3354,17 +3385,60 @@ class NumberList implements JavaScriptIndexingBehavior, List<Number> native "*SV |
void forEach(void f(Number element)) => Collections.forEach(this, f); |
- Collection map(f(Number element)) => Collections.map(this, [], f); |
+ String join([String separator]) => Collections.joinList(this, separator); |
+ |
+ List mappedBy(f(Number element)) => new MappedList<Number, dynamic>(this, f); |
- Collection<Number> filter(bool f(Number element)) => |
- Collections.filter(this, <Number>[], f); |
+ Iterable<Number> where(bool f(Number element)) => new WhereIterable<Number>(this, f); |
bool every(bool f(Number element)) => Collections.every(this, f); |
- bool some(bool f(Number element)) => Collections.some(this, f); |
+ bool any(bool f(Number element)) => Collections.any(this, f); |
bool get isEmpty => this.length == 0; |
+ List<Number> take(int n) => new ListView<Number>(this, 0, n); |
+ |
+ Iterable<Number> takeWhile(bool test(Number value)) { |
+ return new TakeWhileIterable<Number>(this, test); |
+ } |
+ |
+ List<Number> skip(int n) => new ListView<Number>(this, n, null); |
+ |
+ Iterable<Number> skipWhile(bool test(Number value)) { |
+ return new SkipWhileIterable<Number>(this, test); |
+ } |
+ |
+ Number firstMatching(bool test(Number value), { Number orElse() }) { |
+ return Collections.firstMatching(this, test, orElse); |
+ } |
+ |
+ Number lastMatching(bool test(Number value), {Number orElse()}) { |
+ return Collections.lastMatchingInList(this, test, orElse); |
+ } |
+ |
+ Number singleMatching(bool test(Number value)) { |
+ return Collections.singleMatching(this, test); |
+ } |
+ |
+ Number elementAt(int index) { |
+ return this[index]; |
+ } |
+ |
+ // From Collection<Number>: |
+ |
+ void add(Number value) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
+ void addLast(Number value) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
+ void addAll(Iterable<Number> iterable) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
// From List<Number>: |
void set length(int value) { |
throw new UnsupportedError("Cannot resize immutable List."); |
@@ -3384,9 +3458,25 @@ class NumberList implements JavaScriptIndexingBehavior, List<Number> native "*SV |
return Lists.lastIndexOf(this, element, start); |
} |
- Number get first => this[0]; |
+ Number get first { |
+ if (this.length > 0) return this[0]; |
+ throw new StateError("No elements"); |
+ } |
- Number get last => this[length - 1]; |
+ Number get last { |
+ if (this.length > 0) return this[this.length - 1]; |
+ throw new StateError("No elements"); |
+ } |
+ |
+ Number get single { |
+ if (length == 1) return this[0]; |
+ if (length == 0) throw new StateError("No elements"); |
+ throw new StateError("More than one element"); |
+ } |
+ |
+ Number min([int compare(Number a, Number b)]) => _Collections.minInList(this, compare); |
+ |
+ Number max([int compare(Number a, Number b)]) => _Collections.maxInList(this, compare); |
Number removeAt(int pos) { |
throw new UnsupportedError("Cannot removeAt on immutable List."); |
@@ -4024,29 +4114,15 @@ class PathSegList implements JavaScriptIndexingBehavior, List<PathSeg> native "* |
// From Iterable<PathSeg>: |
- Iterator<PathSeg> iterator() { |
+ Iterator<PathSeg> get iterator { |
// Note: NodeLists are not fixed size. And most probably length shouldn't |
// be cached in both iterator _and_ forEach method. For now caching it |
// for consistency. |
return new FixedSizeListIterator<PathSeg>(this); |
} |
- // From Collection<PathSeg>: |
// SVG Collections expose numberOfItems rather than length. |
int get length => numberOfItems; |
- |
- void add(PathSeg value) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
- void addLast(PathSeg value) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
- void addAll(Collection<PathSeg> collection) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
dynamic reduce(dynamic initialValue, dynamic combine(dynamic, PathSeg)) { |
return Collections.reduce(this, initialValue, combine); |
} |
@@ -4055,17 +4131,60 @@ class PathSegList implements JavaScriptIndexingBehavior, List<PathSeg> native "* |
void forEach(void f(PathSeg element)) => Collections.forEach(this, f); |
- Collection map(f(PathSeg element)) => Collections.map(this, [], f); |
+ String join([String separator]) => Collections.joinList(this, separator); |
+ |
+ List mappedBy(f(PathSeg element)) => new MappedList<PathSeg, dynamic>(this, f); |
- Collection<PathSeg> filter(bool f(PathSeg element)) => |
- Collections.filter(this, <PathSeg>[], f); |
+ Iterable<PathSeg> where(bool f(PathSeg element)) => new WhereIterable<PathSeg>(this, f); |
bool every(bool f(PathSeg element)) => Collections.every(this, f); |
- bool some(bool f(PathSeg element)) => Collections.some(this, f); |
+ bool any(bool f(PathSeg element)) => Collections.any(this, f); |
bool get isEmpty => this.length == 0; |
+ List<PathSeg> take(int n) => new ListView<PathSeg>(this, 0, n); |
+ |
+ Iterable<PathSeg> takeWhile(bool test(PathSeg value)) { |
+ return new TakeWhileIterable<PathSeg>(this, test); |
+ } |
+ |
+ List<PathSeg> skip(int n) => new ListView<PathSeg>(this, n, null); |
+ |
+ Iterable<PathSeg> skipWhile(bool test(PathSeg value)) { |
+ return new SkipWhileIterable<PathSeg>(this, test); |
+ } |
+ |
+ PathSeg firstMatching(bool test(PathSeg value), { PathSeg orElse() }) { |
+ return Collections.firstMatching(this, test, orElse); |
+ } |
+ |
+ PathSeg lastMatching(bool test(PathSeg value), {PathSeg orElse()}) { |
+ return Collections.lastMatchingInList(this, test, orElse); |
+ } |
+ |
+ PathSeg singleMatching(bool test(PathSeg value)) { |
+ return Collections.singleMatching(this, test); |
+ } |
+ |
+ PathSeg elementAt(int index) { |
+ return this[index]; |
+ } |
+ |
+ // From Collection<PathSeg>: |
+ |
+ void add(PathSeg value) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
+ void addLast(PathSeg value) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
+ void addAll(Iterable<PathSeg> iterable) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
// From List<PathSeg>: |
void set length(int value) { |
throw new UnsupportedError("Cannot resize immutable List."); |
@@ -4085,9 +4204,25 @@ class PathSegList implements JavaScriptIndexingBehavior, List<PathSeg> native "* |
return Lists.lastIndexOf(this, element, start); |
} |
- PathSeg get first => this[0]; |
+ PathSeg get first { |
+ if (this.length > 0) return this[0]; |
+ throw new StateError("No elements"); |
+ } |
+ |
+ PathSeg get last { |
+ if (this.length > 0) return this[this.length - 1]; |
+ throw new StateError("No elements"); |
+ } |
+ |
+ PathSeg get single { |
+ if (length == 1) return this[0]; |
+ if (length == 0) throw new StateError("No elements"); |
+ throw new StateError("More than one element"); |
+ } |
+ |
+ PathSeg min([int compare(PathSeg a, PathSeg b)]) => _Collections.minInList(this, compare); |
- PathSeg get last => this[length - 1]; |
+ PathSeg max([int compare(PathSeg a, PathSeg b)]) => _Collections.maxInList(this, compare); |
PathSeg removeAt(int pos) { |
throw new UnsupportedError("Cannot removeAt on immutable List."); |
@@ -4750,29 +4885,15 @@ class StringList implements JavaScriptIndexingBehavior, List<String> native "*SV |
// From Iterable<String>: |
- Iterator<String> iterator() { |
+ Iterator<String> get iterator { |
// Note: NodeLists are not fixed size. And most probably length shouldn't |
// be cached in both iterator _and_ forEach method. For now caching it |
// for consistency. |
return new FixedSizeListIterator<String>(this); |
} |
- // From Collection<String>: |
// SVG Collections expose numberOfItems rather than length. |
int get length => numberOfItems; |
- |
- void add(String value) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
- void addLast(String value) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
- void addAll(Collection<String> collection) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
dynamic reduce(dynamic initialValue, dynamic combine(dynamic, String)) { |
return Collections.reduce(this, initialValue, combine); |
} |
@@ -4781,17 +4902,60 @@ class StringList implements JavaScriptIndexingBehavior, List<String> native "*SV |
void forEach(void f(String element)) => Collections.forEach(this, f); |
- Collection map(f(String element)) => Collections.map(this, [], f); |
+ String join([String separator]) => Collections.joinList(this, separator); |
+ |
+ List mappedBy(f(String element)) => new MappedList<String, dynamic>(this, f); |
- Collection<String> filter(bool f(String element)) => |
- Collections.filter(this, <String>[], f); |
+ Iterable<String> where(bool f(String element)) => new WhereIterable<String>(this, f); |
bool every(bool f(String element)) => Collections.every(this, f); |
- bool some(bool f(String element)) => Collections.some(this, f); |
+ bool any(bool f(String element)) => Collections.any(this, f); |
bool get isEmpty => this.length == 0; |
+ List<String> take(int n) => new ListView<String>(this, 0, n); |
+ |
+ Iterable<String> takeWhile(bool test(String value)) { |
+ return new TakeWhileIterable<String>(this, test); |
+ } |
+ |
+ List<String> skip(int n) => new ListView<String>(this, n, null); |
+ |
+ Iterable<String> skipWhile(bool test(String value)) { |
+ return new SkipWhileIterable<String>(this, test); |
+ } |
+ |
+ String firstMatching(bool test(String value), { String orElse() }) { |
+ return Collections.firstMatching(this, test, orElse); |
+ } |
+ |
+ String lastMatching(bool test(String value), {String orElse()}) { |
+ return Collections.lastMatchingInList(this, test, orElse); |
+ } |
+ |
+ String singleMatching(bool test(String value)) { |
+ return Collections.singleMatching(this, test); |
+ } |
+ |
+ String elementAt(int index) { |
+ return this[index]; |
+ } |
+ |
+ // From Collection<String>: |
+ |
+ void add(String value) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
+ void addLast(String value) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
+ void addAll(Iterable<String> iterable) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
// From List<String>: |
void set length(int value) { |
throw new UnsupportedError("Cannot resize immutable List."); |
@@ -4811,9 +4975,25 @@ class StringList implements JavaScriptIndexingBehavior, List<String> native "*SV |
return Lists.lastIndexOf(this, element, start); |
} |
- String get first => this[0]; |
+ String get first { |
+ if (this.length > 0) return this[0]; |
+ throw new StateError("No elements"); |
+ } |
+ |
+ String get last { |
+ if (this.length > 0) return this[this.length - 1]; |
+ throw new StateError("No elements"); |
+ } |
+ |
+ String get single { |
+ if (length == 1) return this[0]; |
+ if (length == 0) throw new StateError("No elements"); |
+ throw new StateError("More than one element"); |
+ } |
+ |
+ String min([int compare(String a, String b)]) => _Collections.minInList(this, compare); |
- String get last => this[length - 1]; |
+ String max([int compare(String a, String b)]) => _Collections.maxInList(this, compare); |
String removeAt(int pos) { |
throw new UnsupportedError("Cannot removeAt on immutable List."); |
@@ -5744,29 +5924,15 @@ class TransformList implements List<Transform>, JavaScriptIndexingBehavior nativ |
// From Iterable<Transform>: |
- Iterator<Transform> iterator() { |
+ Iterator<Transform> get iterator { |
// Note: NodeLists are not fixed size. And most probably length shouldn't |
// be cached in both iterator _and_ forEach method. For now caching it |
// for consistency. |
return new FixedSizeListIterator<Transform>(this); |
} |
- // From Collection<Transform>: |
// SVG Collections expose numberOfItems rather than length. |
int get length => numberOfItems; |
- |
- void add(Transform value) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
- void addLast(Transform value) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
- void addAll(Collection<Transform> collection) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Transform)) { |
return Collections.reduce(this, initialValue, combine); |
} |
@@ -5775,17 +5941,60 @@ class TransformList implements List<Transform>, JavaScriptIndexingBehavior nativ |
void forEach(void f(Transform element)) => Collections.forEach(this, f); |
- Collection map(f(Transform element)) => Collections.map(this, [], f); |
+ String join([String separator]) => Collections.joinList(this, separator); |
+ |
+ List mappedBy(f(Transform element)) => new MappedList<Transform, dynamic>(this, f); |
- Collection<Transform> filter(bool f(Transform element)) => |
- Collections.filter(this, <Transform>[], f); |
+ Iterable<Transform> where(bool f(Transform element)) => new WhereIterable<Transform>(this, f); |
bool every(bool f(Transform element)) => Collections.every(this, f); |
- bool some(bool f(Transform element)) => Collections.some(this, f); |
+ bool any(bool f(Transform element)) => Collections.any(this, f); |
bool get isEmpty => this.length == 0; |
+ List<Transform> take(int n) => new ListView<Transform>(this, 0, n); |
+ |
+ Iterable<Transform> takeWhile(bool test(Transform value)) { |
+ return new TakeWhileIterable<Transform>(this, test); |
+ } |
+ |
+ List<Transform> skip(int n) => new ListView<Transform>(this, n, null); |
+ |
+ Iterable<Transform> skipWhile(bool test(Transform value)) { |
+ return new SkipWhileIterable<Transform>(this, test); |
+ } |
+ |
+ Transform firstMatching(bool test(Transform value), { Transform orElse() }) { |
+ return Collections.firstMatching(this, test, orElse); |
+ } |
+ |
+ Transform lastMatching(bool test(Transform value), {Transform orElse()}) { |
+ return Collections.lastMatchingInList(this, test, orElse); |
+ } |
+ |
+ Transform singleMatching(bool test(Transform value)) { |
+ return Collections.singleMatching(this, test); |
+ } |
+ |
+ Transform elementAt(int index) { |
+ return this[index]; |
+ } |
+ |
+ // From Collection<Transform>: |
+ |
+ void add(Transform value) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
+ void addLast(Transform value) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
+ void addAll(Iterable<Transform> iterable) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
// From List<Transform>: |
void set length(int value) { |
throw new UnsupportedError("Cannot resize immutable List."); |
@@ -5805,9 +6014,25 @@ class TransformList implements List<Transform>, JavaScriptIndexingBehavior nativ |
return Lists.lastIndexOf(this, element, start); |
} |
- Transform get first => this[0]; |
+ Transform get first { |
+ if (this.length > 0) return this[0]; |
+ throw new StateError("No elements"); |
+ } |
- Transform get last => this[length - 1]; |
+ Transform get last { |
+ if (this.length > 0) return this[this.length - 1]; |
+ throw new StateError("No elements"); |
+ } |
+ |
+ Transform get single { |
+ if (length == 1) return this[0]; |
+ if (length == 0) throw new StateError("No elements"); |
+ throw new StateError("More than one element"); |
+ } |
+ |
+ Transform min([int compare(Transform a, Transform b)]) => _Collections.minInList(this, compare); |
+ |
+ Transform max([int compare(Transform a, Transform b)]) => _Collections.maxInList(this, compare); |
Transform removeAt(int pos) { |
throw new UnsupportedError("Cannot removeAt on immutable List."); |
@@ -6152,27 +6377,13 @@ class _ElementInstanceList implements JavaScriptIndexingBehavior, List<ElementIn |
// From Iterable<ElementInstance>: |
- Iterator<ElementInstance> iterator() { |
+ Iterator<ElementInstance> get iterator { |
// Note: NodeLists are not fixed size. And most probably length shouldn't |
// be cached in both iterator _and_ forEach method. For now caching it |
// for consistency. |
return new FixedSizeListIterator<ElementInstance>(this); |
} |
- // From Collection<ElementInstance>: |
- |
- void add(ElementInstance value) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
- void addLast(ElementInstance value) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
- void addAll(Collection<ElementInstance> collection) { |
- throw new UnsupportedError("Cannot add to immutable List."); |
- } |
- |
dynamic reduce(dynamic initialValue, dynamic combine(dynamic, ElementInstance)) { |
return Collections.reduce(this, initialValue, combine); |
} |
@@ -6181,17 +6392,60 @@ class _ElementInstanceList implements JavaScriptIndexingBehavior, List<ElementIn |
void forEach(void f(ElementInstance element)) => Collections.forEach(this, f); |
- Collection map(f(ElementInstance element)) => Collections.map(this, [], f); |
+ String join([String separator]) => Collections.joinList(this, separator); |
+ |
+ List mappedBy(f(ElementInstance element)) => new MappedList<ElementInstance, dynamic>(this, f); |
- Collection<ElementInstance> filter(bool f(ElementInstance element)) => |
- Collections.filter(this, <ElementInstance>[], f); |
+ Iterable<ElementInstance> where(bool f(ElementInstance element)) => new WhereIterable<ElementInstance>(this, f); |
bool every(bool f(ElementInstance element)) => Collections.every(this, f); |
- bool some(bool f(ElementInstance element)) => Collections.some(this, f); |
+ bool any(bool f(ElementInstance element)) => Collections.any(this, f); |
bool get isEmpty => this.length == 0; |
+ List<ElementInstance> take(int n) => new ListView<ElementInstance>(this, 0, n); |
+ |
+ Iterable<ElementInstance> takeWhile(bool test(ElementInstance value)) { |
+ return new TakeWhileIterable<ElementInstance>(this, test); |
+ } |
+ |
+ List<ElementInstance> skip(int n) => new ListView<ElementInstance>(this, n, null); |
+ |
+ Iterable<ElementInstance> skipWhile(bool test(ElementInstance value)) { |
+ return new SkipWhileIterable<ElementInstance>(this, test); |
+ } |
+ |
+ ElementInstance firstMatching(bool test(ElementInstance value), { ElementInstance orElse() }) { |
+ return Collections.firstMatching(this, test, orElse); |
+ } |
+ |
+ ElementInstance lastMatching(bool test(ElementInstance value), {ElementInstance orElse()}) { |
+ return Collections.lastMatchingInList(this, test, orElse); |
+ } |
+ |
+ ElementInstance singleMatching(bool test(ElementInstance value)) { |
+ return Collections.singleMatching(this, test); |
+ } |
+ |
+ ElementInstance elementAt(int index) { |
+ return this[index]; |
+ } |
+ |
+ // From Collection<ElementInstance>: |
+ |
+ void add(ElementInstance value) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
+ void addLast(ElementInstance value) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
+ void addAll(Iterable<ElementInstance> iterable) { |
+ throw new UnsupportedError("Cannot add to immutable List."); |
+ } |
+ |
// From List<ElementInstance>: |
void set length(int value) { |
throw new UnsupportedError("Cannot resize immutable List."); |
@@ -6213,9 +6467,25 @@ class _ElementInstanceList implements JavaScriptIndexingBehavior, List<ElementIn |
return Lists.lastIndexOf(this, element, start); |
} |
- ElementInstance get first => this[0]; |
+ ElementInstance get first { |
+ if (this.length > 0) return this[0]; |
+ throw new StateError("No elements"); |
+ } |
+ |
+ ElementInstance get last { |
+ if (this.length > 0) return this[this.length - 1]; |
+ throw new StateError("No elements"); |
+ } |
+ |
+ ElementInstance get single { |
+ if (length == 1) return this[0]; |
+ if (length == 0) throw new StateError("No elements"); |
+ throw new StateError("More than one element"); |
+ } |
+ |
+ ElementInstance min([int compare(ElementInstance a, ElementInstance b)]) => _Collections.minInList(this, compare); |
- ElementInstance get last => this[length - 1]; |
+ ElementInstance max([int compare(ElementInstance a, ElementInstance b)]) => _Collections.maxInList(this, compare); |
ElementInstance removeAt(int pos) { |
throw new UnsupportedError("Cannot removeAt on immutable List."); |