OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * This class is the public interface of a set. A set is a collection | 6 * This class is the public interface of a set. A set is a collection |
7 * without duplicates. | 7 * without duplicates. |
8 */ | 8 */ |
9 abstract class Set<E> extends Collection<E> { | 9 abstract class Set<E> extends Collection<E> { |
10 factory Set() => new _HashSetImpl<E>(); | 10 factory Set() => new _HashSetImpl<E>(); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 return _backingMap.containsKey(value); | 103 return _backingMap.containsKey(value); |
104 } | 104 } |
105 | 105 |
106 bool remove(E value) { | 106 bool remove(E value) { |
107 if (!_backingMap.containsKey(value)) return false; | 107 if (!_backingMap.containsKey(value)) return false; |
108 _backingMap.remove(value); | 108 _backingMap.remove(value); |
109 return true; | 109 return true; |
110 } | 110 } |
111 | 111 |
112 void addAll(Collection<E> collection) { | 112 void addAll(Collection<E> collection) { |
113 collection.forEach(void _(E value) { | 113 collection.forEach((E value) { |
114 add(value); | 114 add(value); |
115 }); | 115 }); |
116 } | 116 } |
117 | 117 |
118 Set<E> intersection(Collection<E> collection) { | 118 Set<E> intersection(Collection<E> collection) { |
119 Set<E> result = new Set<E>(); | 119 Set<E> result = new Set<E>(); |
120 collection.forEach(void _(E value) { | 120 collection.forEach((E value) { |
121 if (contains(value)) result.add(value); | 121 if (contains(value)) result.add(value); |
122 }); | 122 }); |
123 return result; | 123 return result; |
124 } | 124 } |
125 | 125 |
126 bool isSubsetOf(Collection<E> other) { | 126 bool isSubsetOf(Collection<E> other) { |
127 return new Set<E>.from(other).containsAll(this); | 127 return new Set<E>.from(other).containsAll(this); |
128 } | 128 } |
129 | 129 |
130 void removeAll(Collection<E> collection) { | 130 void removeAll(Collection<E> collection) { |
131 collection.forEach(void _(E value) { | 131 collection.forEach((E value) { |
132 remove(value); | 132 remove(value); |
133 }); | 133 }); |
134 } | 134 } |
135 | 135 |
136 bool containsAll(Collection<E> collection) { | 136 bool containsAll(Collection<E> collection) { |
137 return collection.every(bool _(E value) { | 137 return collection.every((E value) { |
138 return contains(value); | 138 return contains(value); |
139 }); | 139 }); |
140 } | 140 } |
141 | 141 |
142 void forEach(void f(E element)) { | 142 void forEach(void f(E element)) { |
143 _backingMap.forEach(void _(E key, E value) { | 143 _backingMap.forEach((E key, E value) { |
144 f(key); | 144 f(key); |
145 }); | 145 }); |
146 } | 146 } |
147 | 147 |
148 Set map(f(E element)) { | 148 Set map(f(E element)) { |
149 Set result = new Set(); | 149 Set result = new Set(); |
150 _backingMap.forEach(void _(E key, E value) { | 150 _backingMap.forEach((E key, E value) { |
151 result.add(f(key)); | 151 result.add(f(key)); |
152 }); | 152 }); |
153 return result; | 153 return result; |
154 } | 154 } |
155 | 155 |
156 Dynamic reduce(Dynamic initialValue, | 156 Dynamic reduce(Dynamic initialValue, |
157 Dynamic combine(Dynamic previousValue, E element)) { | 157 Dynamic combine(Dynamic previousValue, E element)) { |
158 return Collections.reduce(this, initialValue, combine); | 158 return Collections.reduce(this, initialValue, combine); |
159 } | 159 } |
160 | 160 |
161 Set<E> filter(bool f(E element)) { | 161 Set<E> filter(bool f(E element)) { |
162 Set<E> result = new Set<E>(); | 162 Set<E> result = new Set<E>(); |
163 _backingMap.forEach(void _(E key, E value) { | 163 _backingMap.forEach((E key, E value) { |
164 if (f(key)) result.add(key); | 164 if (f(key)) result.add(key); |
165 }); | 165 }); |
166 return result; | 166 return result; |
167 } | 167 } |
168 | 168 |
169 bool every(bool f(E element)) { | 169 bool every(bool f(E element)) { |
170 Collection<E> keys = _backingMap.keys; | 170 Collection<E> keys = _backingMap.keys; |
171 return keys.every(f); | 171 return keys.every(f); |
172 } | 172 } |
173 | 173 |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 } | 238 } |
239 | 239 |
240 // The entries in the set. May contain null or the sentinel value. | 240 // The entries in the set. May contain null or the sentinel value. |
241 List<E> _entries; | 241 List<E> _entries; |
242 | 242 |
243 // The next valid index in [_entries] or the length of [entries_]. | 243 // The next valid index in [_entries] or the length of [entries_]. |
244 // If it is the length of [_entries], calling [hasNext] on the | 244 // If it is the length of [_entries], calling [hasNext] on the |
245 // iterator will return false. | 245 // iterator will return false. |
246 int _nextValidIndex; | 246 int _nextValidIndex; |
247 } | 247 } |
OLD | NEW |