File tree Expand file tree Collapse file tree 2 files changed +27
-8
lines changed Expand file tree Collapse file tree 2 files changed +27
-8
lines changed Original file line number Diff line number Diff line change @@ -64,12 +64,22 @@ abstract class OrderedSet<E> extends ReadOnlyOrderedSet<E> {
64
64
/// Remove all elements that match the [test] condition; returns the removed
65
65
/// elements.
66
66
Iterable <E > removeWhere (bool Function (E element) test) {
67
- return where (test).toList (growable: false )..forEach (remove);
67
+ final elements = where (test).toList (growable: false );
68
+ for (final element in elements) {
69
+ remove (element);
70
+ }
71
+ return elements;
68
72
}
69
73
70
74
/// Remove all [elements] and returns the removed elements.
71
75
Iterable <E > removeAll (Iterable <E > elements) {
72
- return elements.where (remove).toList (growable: false );
76
+ final removed = < E > [];
77
+ for (final element in elements) {
78
+ if (remove (element)) {
79
+ removed.add (element);
80
+ }
81
+ }
82
+ return removed;
73
83
}
74
84
75
85
/// Removes the element at [index] .
Original file line number Diff line number Diff line change @@ -22,7 +22,7 @@ mixin QueryableOrderedSetImpl<E> on OrderedSet<E> {
22
22
return ;
23
23
}
24
24
_cache[C ] = _CacheEntry <C , E >(
25
- data : _filter <C >(),
25
+ _filter <C >(),
26
26
);
27
27
}
28
28
@@ -62,19 +62,28 @@ mixin QueryableOrderedSetImpl<E> on OrderedSet<E> {
62
62
bool isRegistered <C extends E >() => _cache.containsKey (C );
63
63
64
64
void onAdd (E t) {
65
- _cache.forEach ((key, value) {
65
+ for (final entry in _cache.entries) {
66
+ final value = entry.value;
66
67
if (value.check (t)) {
67
68
value.data.add (t);
68
69
}
69
- });
70
+ }
70
71
}
71
72
72
73
void onRemove (E e) {
73
- _cache.values.forEach ((v) => v.data.remove (e));
74
+ for (final entry in _cache.entries) {
75
+ final value = entry.value;
76
+ if (value.check (e)) {
77
+ value.data.remove (e);
78
+ }
79
+ }
74
80
}
75
81
76
82
void onClear () {
77
- _cache.values.forEach ((v) => v.data.clear ());
83
+ for (final entry in _cache.entries) {
84
+ final value = entry.value;
85
+ value.data.clear ();
86
+ }
78
87
}
79
88
80
89
List <C > _filter <C extends E >() => whereType <C >().toList ();
@@ -83,7 +92,7 @@ mixin QueryableOrderedSetImpl<E> on OrderedSet<E> {
83
92
class _CacheEntry <C , T > {
84
93
final List <C > data;
85
94
86
- _CacheEntry ({ required this .data} );
95
+ _CacheEntry (this .data);
87
96
88
97
bool check (T t) {
89
98
return t is C ;
You can’t perform that action at this time.
0 commit comments