From dda91f0e00b10e92a2dcefbe48baf2542d34dbe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Fri, 18 Sep 2015 14:30:15 +0200 Subject: [PATCH] Return tree_iterator reference in tree traversal functions to allow easy chaining (e.g. i.go_parent().go_left().go_right()) --- .../boost/intrusive/detail/tree_iterator.hpp | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/include/boost/intrusive/detail/tree_iterator.hpp b/include/boost/intrusive/detail/tree_iterator.hpp index c2e980d..4985c6c 100644 --- a/include/boost/intrusive/detail/tree_iterator.hpp +++ b/include/boost/intrusive/detail/tree_iterator.hpp @@ -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 (*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 (*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 (*this); + } operator unspecified_bool_type() const { return members_.nodeptr_ ? &tree_iterator::unspecified_bool_type_func : 0; }