Return tree_iterator reference in tree traversal functions to allow easy chaining (e.g. i.go_parent().go_left().go_right())

This commit is contained in:
Ion Gaztañaga
2015-09-18 14:30:15 +02:00
parent 6fd1452c2b
commit dda91f0e00

View File

@@ -106,14 +106,23 @@ class tree_iterator
return result;
}
void go_left()
{ members_.nodeptr_ = node_traits::get_left(members_.nodeptr_); }
tree_iterator& go_left()
{
members_.nodeptr_ = node_traits::get_left(members_.nodeptr_);
return static_cast<tree_iterator&> (*this);
}
void go_right()
{ members_.nodeptr_ = node_traits::get_right(members_.nodeptr_); }
tree_iterator& go_right()
{
members_.nodeptr_ = node_traits::get_right(members_.nodeptr_);
return static_cast<tree_iterator&> (*this);
}
void go_parent()
{ members_.nodeptr_ = node_traits::get_parent(members_.nodeptr_); }
tree_iterator& go_parent()
{
members_.nodeptr_ = node_traits::get_parent(members_.nodeptr_);
return static_cast<tree_iterator&> (*this);
}
operator unspecified_bool_type() const
{ return members_.nodeptr_ ? &tree_iterator::unspecified_bool_type_func : 0; }