diff options
Diffstat (limited to 'boost/intrusive/detail/iterator.hpp')
-rw-r--r-- | boost/intrusive/detail/iterator.hpp | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/boost/intrusive/detail/iterator.hpp b/boost/intrusive/detail/iterator.hpp index 9f0fe606f4..2ae6abb7d0 100644 --- a/boost/intrusive/detail/iterator.hpp +++ b/boost/intrusive/detail/iterator.hpp @@ -23,6 +23,7 @@ #include <cstddef> #include <boost/intrusive/detail/std_fwd.hpp> +#include <boost/intrusive/detail/workaround.hpp> #include <boost/move/detail/iterator_traits.hpp> #include <boost/move/detail/meta_utils_core.hpp> @@ -34,14 +35,14 @@ using boost::movelib::iterator_traits; //////////////////// // iterator //////////////////// -template<class Category, class T, class Distance, class Pointer = T*, class Reference = T&> +template<class Category, class T, class Difference, class Pointer, class Reference> struct iterator { - typedef Category iterator_category; - typedef T value_type; - typedef Distance difference_type; - typedef Pointer pointer; - typedef Reference reference; + typedef Category iterator_category; + typedef T value_type; + typedef Difference difference_type; + typedef Pointer pointer; + typedef Reference reference; }; //////////////////////////////////////// @@ -83,7 +84,7 @@ struct iterator_disable_if_tag_difference_type //////////////////// // advance //////////////////// -template<class InputIt, class Distance> inline +template<class InputIt, class Distance> typename iterator_enable_if_tag<InputIt, std::input_iterator_tag>::type iterator_advance(InputIt& it, Distance n) { @@ -91,7 +92,7 @@ typename iterator_enable_if_tag<InputIt, std::input_iterator_tag>::type ++it; } -template<class InputIt, class Distance> inline +template<class InputIt, class Distance> typename iterator_enable_if_tag<InputIt, std::forward_iterator_tag>::type iterator_advance(InputIt& it, Distance n) { @@ -99,7 +100,7 @@ typename iterator_enable_if_tag<InputIt, std::forward_iterator_tag>::type ++it; } -template<class InputIt, class Distance> inline +template<class InputIt, class Distance> typename iterator_enable_if_tag<InputIt, std::bidirectional_iterator_tag>::type iterator_advance(InputIt& it, Distance n) { @@ -109,8 +110,8 @@ typename iterator_enable_if_tag<InputIt, std::bidirectional_iterator_tag>::type --it; } -template<class InputIt, class Distance> inline -typename iterator_enable_if_tag<InputIt, std::random_access_iterator_tag>::type +template<class InputIt, class Distance> +BOOST_INTRUSIVE_FORCEINLINE typename iterator_enable_if_tag<InputIt, std::random_access_iterator_tag>::type iterator_advance(InputIt& it, Distance n) { it += n; @@ -132,8 +133,8 @@ typename iterator_disable_if_tag_difference_type return off; } -template<class InputIt> inline -typename iterator_enable_if_tag_difference_type +template<class InputIt> +BOOST_INTRUSIVE_FORCEINLINE typename iterator_enable_if_tag_difference_type <InputIt, std::random_access_iterator_tag>::type iterator_distance(InputIt first, InputIt last) { @@ -142,11 +143,11 @@ typename iterator_enable_if_tag_difference_type } template<class I> -typename iterator_traits<I>::pointer iterator_arrow_result(const I &i) +BOOST_INTRUSIVE_FORCEINLINE typename iterator_traits<I>::pointer iterator_arrow_result(const I &i) { return i.operator->(); } template<class T> -T * iterator_arrow_result(T *p) +BOOST_INTRUSIVE_FORCEINLINE T * iterator_arrow_result(T *p) { return p; } } //namespace intrusive |