OLD | NEW |
| (Empty) |
1 part of dart.collection; | |
2 abstract class SetMixin<E> implements Set<E> {bool add(E element); | |
3 bool contains(Object element); | |
4 E lookup(Object element); | |
5 bool remove(Object element); | |
6 Iterator<E> get iterator; | |
7 Set<E> toSet(); | |
8 int get length; | |
9 bool get isEmpty => length == 0; | |
10 bool get isNotEmpty => length != 0; | |
11 void clear() { | |
12 removeAll(toList()); | |
13 } | |
14 void addAll(Iterable<E> elements) { | |
15 for (E element in elements) add(element); | |
16 } | |
17 void removeAll(Iterable<Object> elements) { | |
18 for (Object element in elements) remove(element); | |
19 } | |
20 void retainAll(Iterable<Object> elements) { | |
21 Set<E> toRemove = toSet(); | |
22 for (Object o in elements) { | |
23 toRemove.remove(o); | |
24 } | |
25 removeAll(toRemove); | |
26 } | |
27 void removeWhere(bool test(E element)) { | |
28 List toRemove = []; | |
29 for (E element in this) { | |
30 if (test(element)) toRemove.add(element); | |
31 } | |
32 removeAll(toRemove); | |
33 } | |
34 void retainWhere(bool test(E element)) { | |
35 List toRemove = []; | |
36 for (E element in this) { | |
37 if (!test(element)) toRemove.add(element); | |
38 } | |
39 removeAll(toRemove); | |
40 } | |
41 bool containsAll(Iterable<Object> other) { | |
42 for (Object o in other) { | |
43 if (!contains(o)) return false; | |
44 } | |
45 return true; | |
46 } | |
47 Set<E> union(Set<E> other) { | |
48 return toSet()..addAll(other); | |
49 } | |
50 Set<E> intersection(Set<Object> other) { | |
51 Set<E> result = toSet(); | |
52 for (E element in this) { | |
53 if (!other.contains(element)) result.remove(element); | |
54 } | |
55 return result; | |
56 } | |
57 Set<E> difference(Set<Object> other) { | |
58 Set<E> result = toSet(); | |
59 for (E element in this) { | |
60 if (other.contains(element)) result.remove(element); | |
61 } | |
62 return result; | |
63 } | |
64 List<E> toList({ | |
65 bool growable : true} | |
66 ) { | |
67 List<E> result = growable ? (new List<E>()..length = length) : new List<E>(len
gth); | |
68 int i = 0; | |
69 for (E element in this) result[i++] = element; | |
70 return result; | |
71 } | |
72 Iterable map(f(E element)) => new EfficientLengthMappedIterable<E, dynamic>(thi
s, f); | |
73 E get single { | |
74 if (length > 1) throw IterableElementError.tooMany(); | |
75 Iterator<E> it = iterator; | |
76 if (!it.moveNext()) throw IterableElementError.noElement(); | |
77 E result = it.current; | |
78 return result; | |
79 } | |
80 String toString() => IterableBase.iterableToFullString(this, '{', '}'); | |
81 Iterable<E> where(bool f(E element)) => new WhereIterable<E>(this, f); | |
82 Iterable expand(Iterable f(E element)) => new ExpandIterable<E, dynamic>(this,
f); | |
83 void forEach(void f(E element)) { | |
84 for (E element in this) f(element); | |
85 } | |
86 E reduce(E combine(E value, E element)) { | |
87 Iterator<E> iterator = this.iterator; | |
88 if (!iterator.moveNext()) { | |
89 throw IterableElementError.noElement(); | |
90 } | |
91 E value = iterator.current; | |
92 while (iterator.moveNext()) { | |
93 value = combine(value, iterator.current); | |
94 } | |
95 return value; | |
96 } | |
97 dynamic fold(var initialValue, dynamic combine(var previousValue, E element)) { | |
98 var value = initialValue; | |
99 for (E element in this) value = combine(value, element); | |
100 return value; | |
101 } | |
102 bool every(bool f(E element)) { | |
103 for (E element in this) { | |
104 if (!f(element)) return false; | |
105 } | |
106 return true; | |
107 } | |
108 String join([String separator = ""]) { | |
109 Iterator<E> iterator = this.iterator; | |
110 if (!iterator.moveNext()) return ""; | |
111 StringBuffer buffer = new StringBuffer(); | |
112 if (separator == null || separator == "") { | |
113 do { | |
114 buffer.write("${iterator.current}"); | |
115 } | |
116 while (iterator.moveNext());} | |
117 else { | |
118 buffer.write("${iterator.current}"); | |
119 while (iterator.moveNext()) { | |
120 buffer.write(separator); | |
121 buffer.write("${iterator.current}"); | |
122 } | |
123 } | |
124 return buffer.toString(); | |
125 } | |
126 bool any(bool test(E element)) { | |
127 for (E element in this) { | |
128 if (test(element)) return true; | |
129 } | |
130 return false; | |
131 } | |
132 Iterable<E> take(int n) { | |
133 return new TakeIterable<E>(this, n); | |
134 } | |
135 Iterable<E> takeWhile(bool test(E value)) { | |
136 return new TakeWhileIterable<E>(this, test); | |
137 } | |
138 Iterable<E> skip(int n) { | |
139 return new SkipIterable<E>(this, n); | |
140 } | |
141 Iterable<E> skipWhile(bool test(E value)) { | |
142 return new SkipWhileIterable<E>(this, test); | |
143 } | |
144 E get first { | |
145 Iterator<E> it = iterator; | |
146 if (!it.moveNext()) { | |
147 throw IterableElementError.noElement(); | |
148 } | |
149 return it.current; | |
150 } | |
151 E get last { | |
152 Iterator<E> it = iterator; | |
153 if (!it.moveNext()) { | |
154 throw IterableElementError.noElement(); | |
155 } | |
156 E result; | |
157 do { | |
158 result = it.current; | |
159 } | |
160 while (it.moveNext()); return result; | |
161 } | |
162 E firstWhere(bool test(E value), { | |
163 E orElse()} | |
164 ) { | |
165 for (E element in this) { | |
166 if (test(element)) return element; | |
167 } | |
168 if (orElse != null) return orElse(); | |
169 throw IterableElementError.noElement(); | |
170 } | |
171 E lastWhere(bool test(E value), { | |
172 E orElse()} | |
173 ) { | |
174 E result = null; | |
175 bool foundMatching = false; | |
176 for (E element in this) { | |
177 if (test(element)) { | |
178 result = element; | |
179 foundMatching = true; | |
180 } | |
181 } | |
182 if (foundMatching) return result; | |
183 if (orElse != null) return orElse(); | |
184 throw IterableElementError.noElement(); | |
185 } | |
186 E singleWhere(bool test(E value)) { | |
187 E result = null; | |
188 bool foundMatching = false; | |
189 for (E element in this) { | |
190 if (test(element)) { | |
191 if (foundMatching) { | |
192 throw IterableElementError.tooMany(); | |
193 } | |
194 result = element; | |
195 foundMatching = true; | |
196 } | |
197 } | |
198 if (foundMatching) return result; | |
199 throw IterableElementError.noElement(); | |
200 } | |
201 E elementAt(int index) { | |
202 if (index is! int) throw new ArgumentError.notNull("index"); | |
203 RangeError.checkNotNegative(index, "index"); | |
204 int elementIndex = 0; | |
205 for (E element in this) { | |
206 if (index == elementIndex) return element; | |
207 elementIndex++; | |
208 } | |
209 throw new RangeError.index(index, this, "index", null, elementIndex); | |
210 } | |
211 } | |
212 abstract class SetBase<E> extends SetMixin<E> {static String setToString(Set se
t) => IterableBase.iterableToFullString(set, '{', '}'); | |
213 } | |
OLD | NEW |