From 4f60ed75b57c9ea74cfd6ab6f78480a193763ed4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Sat, 8 Feb 2014 09:17:37 +0100 Subject: [PATCH] Fix MSVC-8.0 iterator sizes avoiding derivation from std::iterator_traits --- include/boost/intrusive/detail/hashtable_node.hpp | 15 +++++++++------ include/boost/intrusive/detail/list_node.hpp | 9 +++++---- include/boost/intrusive/detail/slist_node.hpp | 9 +++++---- include/boost/intrusive/detail/tree_node.hpp | 12 ++++++------ include/boost/intrusive/detail/utilities.hpp | 2 +- 5 files changed, 26 insertions(+), 21 deletions(-) diff --git a/include/boost/intrusive/detail/hashtable_node.hpp b/include/boost/intrusive/detail/hashtable_node.hpp index 1972634..7fd1821 100644 --- a/include/boost/intrusive/detail/hashtable_node.hpp +++ b/include/boost/intrusive/detail/hashtable_node.hpp @@ -173,7 +173,8 @@ struct get_slist_impl template class hashtable_iterator - : public std::iterator +{ + typedef std::iterator < std::forward_iterator_tag , typename BucketValueTraits::value_traits::value_type , typename pointer_traits::difference_type @@ -181,8 +182,8 @@ class hashtable_iterator ::type * , typename detail::add_const_if_c ::type & - > -{ + > iterator_traits; + typedef typename BucketValueTraits::value_traits value_traits; typedef typename BucketValueTraits::bucket_traits bucket_traits; typedef typename value_traits::node_traits node_traits; @@ -207,9 +208,11 @@ class hashtable_iterator } public: - typedef typename value_traits::value_type value_type; - typedef typename detail::add_const_if_c::type *pointer; - typedef typename detail::add_const_if_c::type &reference; + typedef typename iterator_traits::difference_type difference_type; + typedef typename iterator_traits::value_type value_type; + typedef typename iterator_traits::pointer pointer; + typedef typename iterator_traits::reference reference; + typedef typename iterator_traits::iterator_category iterator_category; hashtable_iterator () {} diff --git a/include/boost/intrusive/detail/list_node.hpp b/include/boost/intrusive/detail/list_node.hpp index 6f1bdbe..b0c2692 100644 --- a/include/boost/intrusive/detail/list_node.hpp +++ b/include/boost/intrusive/detail/list_node.hpp @@ -67,7 +67,6 @@ struct list_node_traits // node oriented bidirectional iterator: template class list_iterator - : public iiterator::iterator_base { protected: typedef iiterator @@ -83,9 +82,11 @@ class list_iterator typedef typename types_t::void_pointer void_pointer; public: - typedef typename types_t::value_type value_type; - typedef typename types_t::pointer pointer; - typedef typename types_t::reference reference; + typedef typename types_t::iterator_traits::difference_type difference_type; + typedef typename types_t::iterator_traits::value_type value_type; + typedef typename types_t::iterator_traits::pointer pointer; + typedef typename types_t::iterator_traits::reference reference; + typedef typename types_t::iterator_traits::iterator_category iterator_category; typedef typename pointer_traits ::template rebind_pointer diff --git a/include/boost/intrusive/detail/slist_node.hpp b/include/boost/intrusive/detail/slist_node.hpp index af124af..76a9706 100644 --- a/include/boost/intrusive/detail/slist_node.hpp +++ b/include/boost/intrusive/detail/slist_node.hpp @@ -56,7 +56,6 @@ struct slist_node_traits // node oriented bidirectional iterator: template class slist_iterator - : public iiterator::iterator_base { protected: typedef iiterator @@ -72,9 +71,11 @@ class slist_iterator typedef typename types_t::void_pointer void_pointer; public: - typedef typename types_t::value_type value_type; - typedef typename types_t::pointer pointer; - typedef typename types_t::reference reference; + typedef typename types_t::iterator_traits::difference_type difference_type; + typedef typename types_t::iterator_traits::value_type value_type; + typedef typename types_t::iterator_traits::pointer pointer; + typedef typename types_t::iterator_traits::reference reference; + typedef typename types_t::iterator_traits::iterator_category iterator_category; typedef typename pointer_traits ::template rebind_pointer diff --git a/include/boost/intrusive/detail/tree_node.hpp b/include/boost/intrusive/detail/tree_node.hpp index 68891f1..c6f1dd9 100644 --- a/include/boost/intrusive/detail/tree_node.hpp +++ b/include/boost/intrusive/detail/tree_node.hpp @@ -82,7 +82,6 @@ struct tree_node_traits // node oriented bidirectional iterator: template class tree_iterator - : public iiterator::iterator_base { protected: typedef iiterator< RealValueTraits, IsConst @@ -99,13 +98,14 @@ class tree_iterator typedef typename pointer_traits ::template rebind_pointer ::type const_real_value_traits_ptr; + typedef bstree_algorithms node_algorithms; public: - typedef typename types_t::value_type value_type; - typedef typename types_t::pointer pointer; - typedef typename types_t::reference reference; - - typedef bstree_algorithms node_algorithms; + typedef typename types_t::iterator_traits::difference_type difference_type; + typedef typename types_t::iterator_traits::value_type value_type; + typedef typename types_t::iterator_traits::pointer pointer; + typedef typename types_t::iterator_traits::reference reference; + typedef typename types_t::iterator_traits::iterator_category iterator_category; tree_iterator() {} diff --git a/include/boost/intrusive/detail/utilities.hpp b/include/boost/intrusive/detail/utilities.hpp index dfb677c..c121c2c 100644 --- a/include/boost/intrusive/detail/utilities.hpp +++ b/include/boost/intrusive/detail/utilities.hpp @@ -1106,7 +1106,7 @@ struct iiterator , difference_type , pointer , reference - > iterator_base; + > iterator_traits; static const bool stateful_value_traits = detail::is_stateful_value_traits::value; };