_set._nitems--;
_removed = true;
}
+
+ public bool at_element {
+ get {
+ return ! _removed && _iter.at_element;
+ }
+ }
}
}
assert (_index < _list._size);
return _index;
}
+
+ public bool at_element {
+ get {
+ stderr.printf ("%d %s\n", _index, _removed ? "true" : "false");
+ return _index >= 0 && _index < _list._size && ! _removed;
+ }
+ }
}
}
}
return (_next != null);
}
+
+ public bool at_element {
+ get {
+ return _node != null;
+ }
+ }
}
private class KeyIterator<K,V> : NodeIterator<K,V>, Iterator<K> {
_node = null;
_stamp = _set._stamp;
}
+
+ public bool at_element {
+ get {
+ return _node != null;
+ }
+ }
}
}
* the next move of the cursor (calling {@link next}).
*/
public abstract void remove ();
+
+ /**
+ * Determines wheather the call to {@link get} is legal. It is false at the
+ * beginning and after {@link remove} call and true otherwise.
+ */
+ public abstract bool at_element { get; }
}
return this._index;
}
+
+ public bool at_element {
+ get {
+ return !this.removed && this.position != null;
+ }
+ }
}
private unowned Node<G>? _get_node_at (int index) {
* {@link next}).
*/
public abstract void unset ();
+
+ /**
+ * Determines wheather the call to {@link get_key}, {@link get_value} and
+ * {@link set_value} is legal. It is false at the beginning and after
+ * {@link unset} call and true otherwise.
+ */
+ public abstract bool at_element { get; }
}
return false;
}
removed = false;
+ started = true;
position = _next;
_next = null;
return (position != null);
private bool _has_next() {
if (!started) {
- started = true;
return _next != null;
} else if (_next is Type1Node) {
var node = _next as Type1Node<G>;
assert (position != null);
return position;
}
+
+
+ public bool at_element {
+ get {
+ return started && ! removed && position != null;
+ }
+ }
}
}
public void remove () {
assert_not_reached ();
}
+
+ public bool at_element {
+ get {
+ return _iter.at_element;
+ }
+ }
}
public virtual Collection<G> read_only_view {
public void unset () {
assert_not_reached ();
}
+
+ public bool at_element {
+ get {
+ return _iter.at_element;
+ }
+ }
}
}
_map.stamp++;
assert (stamp == _map.stamp);
}
+
+ public bool at_element {
+ get {
+ return current != null;
+ }
+ }
}
private class KeyIterator<K,V> : NodeIterator<K,V>, Gee.Iterator<K>, BidirIterator<K> {
return _next != null;
}
}
+
+ public bool at_element {
+ get {
+ assert (stamp == _set.stamp);
+ return current != null;
+ }
+ }
private weak Node<G>? current = null;
private weak Node<G>? _next = null;
assert (iterator != null);
iterator.remove ();
}
+
+ public bool at_element {
+ get {
+ return iterator.at_element;
+ }
+ }
private new TreeSet<G> set;
private Range<G> range;
bool two_found_once = true;
bool three_found_once = true;
iterator = test_collection.iterator ();
+ bool at_element = iterator.at_element;
+ assert (! at_element);
while (true) {
has_next = iterator.has_next ();
+ assert (at_element == iterator.at_element);
assert (has_next == iterator.next ());
+ assert (at_element = iterator.at_element);
if (! has_next) {
break;
}
string element = iterator.get ();
+ assert (iterator.at_element);
if (element == "one") {
if (one_found) {
one_found_once = false;
}
has_next = iterator.has_next ();
assert (! has_next);
+ assert (iterator.at_element);
assert (has_next == iterator.next ());
+ assert (iterator.at_element);
assert (one_found);
assert (one_found_once);
assert (two_found);
iterator = test_collection.iterator ();
assert (iterator.has_next ());
+ assert (! iterator.at_element);
assert (iterator.next ());
one_found = false;
if (! has_next) {
break;
}
+ assert (iterator.at_element);
string element = iterator.get ();
if (element == "one") {
// Remove this element
iterator.remove ();
+ assert (! iterator.at_element);
} else if (element == "three") {
if (three_found) {
three_found_once = false;