Index: sdk/lib/core/queue.dart |
diff --git a/sdk/lib/core/queue.dart b/sdk/lib/core/queue.dart |
index 9a000c34143274a16c5d08f0f5829556efc2a59b..b90af624929499950ff5264d270a495a1ab9fedf 100644 |
--- a/sdk/lib/core/queue.dart |
+++ b/sdk/lib/core/queue.dart |
@@ -201,6 +201,59 @@ class DoubleLinkedQueue<E> extends Iterable<E> implements Queue<E> { |
return _sentinel._next.remove(); |
} |
+ void remove(Object o) { |
+ DoubleLinkedQueueEntry<E> entry = firstEntry(); |
+ while (!identical(entry, _sentinel)) { |
+ if (entry.element == o) { |
+ entry.remove(); |
+ return; |
+ } |
+ entry = entry._next; |
+ } |
+ } |
+ |
+ void removeAll(Iterable elements) { |
floitsch
2013/01/17 13:36:58
If Collection provides default implementations, th
Lasse Reichstein Nielsen
2013/01/18 11:41:48
This implementation is not the default implementat
|
+ Set set; |
+ if (elements is Set) { |
+ set = elements; |
+ } else { |
+ set = elements.toSet(); |
+ } |
+ removeMatching(set.contains); |
+ } |
+ |
+ void retainAll(Iterable elements) { |
floitsch
2013/01/17 13:36:58
ditto.
Lasse Reichstein Nielsen
2013/01/18 11:41:48
This one is the same as the default, so it can be
|
+ Set set; |
+ if (elements is Set) { |
+ set = elements; |
+ } else { |
+ set = elements.toSet(); |
+ } |
+ retainMatching(set.contains); |
+ } |
+ |
+ void removeMatching(bool test(E element)) { |
+ DoubleLinkedQueueEntry<E> entry = firstEntry(); |
+ while (!identical(entry, _sentinel)) { |
+ DoubleLinkedQueueEntry<E> next = entry._next; |
+ if (test(entry.element)) { |
+ entry.remove(); |
+ } |
+ entry = next; |
+ } |
+ } |
+ |
+ void retainMatching(bool test(E element)) { |
+ DoubleLinkedQueueEntry<E> entry = firstEntry(); |
+ while (!identical(entry, _sentinel)) { |
+ DoubleLinkedQueueEntry<E> next = entry._next; |
+ if (!test(entry.element)) { |
+ entry.remove(); |
+ } |
+ entry = next; |
+ } |
+ } |
+ |
E get first { |
return _sentinel._next.element; |
} |