///////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 2006-2014 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/intrusive for documentation. // ///////////////////////////////////////////////////////////////////////////// #ifndef BOOST_INTRUSIVE_DETAIL_IITERATOR_HPP #define BOOST_INTRUSIVE_DETAIL_IITERATOR_HPP #ifndef BOOST_CONFIG_HPP # include #endif #if defined(BOOST_HAS_PRAGMA_ONCE) # pragma once #endif #include #include #include #include #include namespace boost { namespace intrusive { template struct value_traits_pointers { typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT (boost::intrusive::detail:: , ValueTraits, value_traits_ptr , typename boost::intrusive::pointer_traits::template rebind_pointer::type) value_traits_ptr; typedef typename boost::intrusive::pointer_traits::template rebind_pointer::type const_value_traits_ptr; }; template struct iiterator { typedef ValueTraits value_traits; typedef typename value_traits::node_traits node_traits; typedef typename node_traits::node node; typedef typename node_traits::node_ptr node_ptr; typedef ::boost::intrusive::pointer_traits nodepointer_traits_t; typedef typename nodepointer_traits_t::template rebind_pointer::type void_pointer; typedef typename ValueTraits::value_type value_type; typedef typename ValueTraits::pointer nonconst_pointer; typedef typename ValueTraits::const_pointer yesconst_pointer; typedef typename ::boost::intrusive::pointer_traits ::reference nonconst_reference; typedef typename ::boost::intrusive::pointer_traits ::reference yesconst_reference; typedef typename nodepointer_traits_t::difference_type difference_type; typedef typename detail::if_c ::type pointer; typedef typename detail::if_c ::type reference; typedef iterator < Category , value_type , difference_type , pointer , reference > iterator_type; typedef typename value_traits_pointers ::value_traits_ptr value_traits_ptr; typedef typename value_traits_pointers ::const_value_traits_ptr const_value_traits_ptr; static const bool stateful_value_traits = detail::is_stateful_value_traits::value; }; template struct iiterator_members { BOOST_INTRUSIVE_FORCEINLINE iiterator_members() : nodeptr_()//Value initialization to achieve "null iterators" (N3644) {} BOOST_INTRUSIVE_FORCEINLINE iiterator_members(const NodePtr &n_ptr, const StoredPointer &data) : nodeptr_(n_ptr), ptr_(data) {} BOOST_INTRUSIVE_FORCEINLINE StoredPointer get_ptr() const { return ptr_; } NodePtr nodeptr_; StoredPointer ptr_; }; template struct iiterator_members { BOOST_INTRUSIVE_FORCEINLINE iiterator_members() : nodeptr_()//Value initialization to achieve "null iterators" (N3644) {} BOOST_INTRUSIVE_FORCEINLINE iiterator_members(const NodePtr &n_ptr, const StoredPointer &) : nodeptr_(n_ptr) {} BOOST_INTRUSIVE_FORCEINLINE StoredPointer get_ptr() const { return StoredPointer(); } NodePtr nodeptr_; }; } //namespace intrusive } //namespace boost #endif //BOOST_INTRUSIVE_DETAIL_IITERATOR_HPP