Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(285)

Unified Diff: sdk/lib/collection/queue.dart

Issue 14425003: Make List.remove return boolean. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sdk/lib/collection/list.dart ('k') | sdk/lib/html/dart2js/html_dart2js.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/collection/queue.dart
diff --git a/sdk/lib/collection/queue.dart b/sdk/lib/collection/queue.dart
index a66248e65185442088740bee73dd5778b725d383..7bc65cab6fe5a63e7da2e3ae1881d748b6025f0d 100644
--- a/sdk/lib/collection/queue.dart
+++ b/sdk/lib/collection/queue.dart
@@ -50,6 +50,15 @@ abstract class Queue<E> implements Iterable<E> {
void add(E value);
/**
+ * Remove a single instance of [value] from the queue.
+ *
+ * Returns `true` if a value was removed, or `false` if the queue
+ * contained no element equal to [value].
+ */
+ bool remove(Object object);
+
+
+ /**
* Adds all elements of [iterable] at the end of the queue. The
* length of the queue is extended by the length of [iterable].
*/
@@ -212,41 +221,24 @@ class DoubleLinkedQueue<E> extends IterableBase<E> implements Queue<E> {
return result;
}
- void remove(Object o) {
+ bool remove(Object o) {
DoubleLinkedQueueEntry<E> entry = firstEntry();
while (!identical(entry, _sentinel)) {
if (entry.element == o) {
entry.remove();
_elementCount--;
- return;
+ return true;
}
entry = entry._next;
}
+ return false;
}
- void retainAll(Iterable elements) {
- _filterIterable(elements, true);
- }
-
- void removeAll(Iterable elements) {
- _filterIterable(elements, false);
- }
-
- void _filterIterable(Iterable elements, bool retainMatching) {
- Set elementSet;
- if (elements is Set) {
- elementSet = elements;
- } else {
- elementSet = elements.toSet();
- }
- _filter(elementSet.contains, retainMatching);
- }
-
- void _filter(bool test(E element), bool retainMatching) {
+ void _filter(bool test(E element), bool removeMatching) {
DoubleLinkedQueueEntry<E> entry = firstEntry();
while (!identical(entry, _sentinel)) {
DoubleLinkedQueueEntry<E> next = entry._next;
- if (test(entry.element) != retainMatching) {
+ if (identical(removeMatching, test(entry.element))) {
entry.remove();
_elementCount--;
}
@@ -255,11 +247,11 @@ class DoubleLinkedQueue<E> extends IterableBase<E> implements Queue<E> {
}
void removeWhere(bool test(E element)) {
- _filter(test, false);
+ _filter(test, true);
}
void retainWhere(bool test(E element)) {
- _filter(test, true);
+ _filter(test, false);
}
E get first {
@@ -479,15 +471,16 @@ class ListQueue<E> extends IterableBase<E> implements Queue<E> {
}
}
- void remove(Object object) {
+ bool remove(Object object) {
for (int i = _head; i != _tail; i = (i + 1) & (_table.length - 1)) {
E element = _table[i];
if (element == object) {
_remove(i);
- return;
+ _modificationCount++;
+ return true;
}
}
- _modificationCount++;
+ return false;
}
void _filterWhere(bool test(E element), bool removeMatching) {
@@ -496,7 +489,7 @@ class ListQueue<E> extends IterableBase<E> implements Queue<E> {
int i = _head;
while (i != _tail) {
E element = _table[i];
- bool remove = (test(element) == removeMatching);
+ bool remove = identical(removeMatching, test(element));
_checkModification(modificationCount);
if (remove) {
i = _remove(i);
« no previous file with comments | « sdk/lib/collection/list.dart ('k') | sdk/lib/html/dart2js/html_dart2js.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698