public override int size {
get { return _nnodes; }
}
-
+
/**
* {@inheritDoc}
*/
_node = null;
_stamp = _set._stamp;
}
-
+
public bool read_only {
get {
return false;
}
}
-
+
public bool valid {
get {
return _node != null;
public bool foreach (ForallFunc<G> f) {
assert (_stamp == _set._stamp);
- if (_node != null) {
- if (!f (_node.key)) {
+ unowned Node<G>? node = _node, next = _next, current = null, prev = null;
+ if (node != null) {
+ if (!f (node.key)) {
return false;
}
+ prev = node;
+ current = node.next;
}
- while (_index + 1 < _set._array_size || _next != null) {
- if (_next != null) {
- _node = _next;
- if (!f (_node.key)) {
+ if (next != null) {
+ if (!f (next.key)) {
+ _node = next;
+ _next = null;
+ return false;
+ }
+ prev = next;
+ current = next.next;
+ }
+ do {
+ while (current != null) {
+ if (!f (current.key)) {
+ _node = current;
+ _next = null;
return false;
}
- _next = _node.next;
- } else {
+ prev = current;
+ current = current.next;
+ }
+ while (current == null && _index + 1 < _set._array_size) {
_index++;
- _next = _set._nodes[_index];
+ current = _set._nodes[_index];
}
- }
+ } while (current != null);
+ _node = prev;
+ _next = null;
return true;
}
}