From 803262ffc8fb2e8f63264d9641d0ca44b593ae0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Sat, 1 Nov 2014 19:51:22 +0100 Subject: [PATCH] Added go_left, go_right_, go_parent and bool conversion to tree iterator --- .../boost/intrusive/detail/tree_iterator.hpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/include/boost/intrusive/detail/tree_iterator.hpp b/include/boost/intrusive/detail/tree_iterator.hpp index c3b599d..78b0fb1 100644 --- a/include/boost/intrusive/detail/tree_iterator.hpp +++ b/include/boost/intrusive/detail/tree_iterator.hpp @@ -49,6 +49,9 @@ class tree_iterator static const bool stateful_value_traits = types_t::stateful_value_traits; typedef bstree_algorithms node_algorithms; + void unspecified_bool_type_func() const {} + typedef void (tree_iterator::*unspecified_bool_type)() const; + public: typedef typename types_t::iterator_traits::difference_type difference_type; typedef typename types_t::iterator_traits::value_type value_type; @@ -100,6 +103,21 @@ class tree_iterator return result; } + void go_left() + { members_.nodeptr_ = node_traits::get_left(members_.nodeptr_); } + + void go_right() + { members_.nodeptr_ = node_traits::get_right(members_.nodeptr_); } + + void go_parent() + { members_.nodeptr_ = node_traits::get_parent(members_.nodeptr_); } + + operator unspecified_bool_type() const + { return members_.nodeptr_ ? &tree_iterator::unspecified_bool_type_func : 0; } + + bool operator! () const + { return !members_.nodeptr_; } + friend bool operator== (const tree_iterator& l, const tree_iterator& r) { return l.pointed_node() == r.pointed_node(); }