forked from boostorg/container
Implements N3644.
- Avoid deriving from std::iterator_traits as iterators become too fat. - Use intrusive's reverse_iterator some std::reverse_iterator-s don't value initialize base.
This commit is contained in:
1 parent
92e81fcf77
commit
3af96e0801
15 files changed
+298
-42
No files matched your search
@@ -146,7 +146,7 @@ class deque_iterator
|
||||
{}
|
||||
|
||||
deque_iterator() BOOST_CONTAINER_NOEXCEPT
|
||||
: m_cur(), m_first(), m_last(), m_node()
|
||||
: m_cur(), m_first(), m_last(), m_node() //Value initialization to achieve "null iterators" (N3644)
|
||||
{}
|
||||
|
||||
deque_iterator(deque_iterator<Pointer, false> const& x) BOOST_CONTAINER_NOEXCEPT
|
||||
@@ -504,8 +504,8 @@ class deque : protected deque_base<Allocator>
|
||||
typedef BOOST_CONTAINER_IMPDEF(allocator_type) stored_allocator_type;
|
||||
typedef BOOST_CONTAINER_IMPDEF(typename Base::iterator) iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(typename Base::const_iterator) const_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<iterator>) reverse_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<const_iterator>) const_reverse_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(container_detail::reverse_iterator<iterator>) reverse_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(container_detail::reverse_iterator<const_iterator>) const_reverse_iterator;
|
||||
|
||||
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
||||
|
||||
|
||||
@@ -85,13 +85,15 @@ struct get_flat_tree_iterators
|
||||
pointer_traits<Pointer>:: template
|
||||
rebind_pointer<const iterator_element_type>::type const_iterator;
|
||||
#else //BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
|
||||
typedef typename container_detail::
|
||||
typedef typename boost::container::container_detail::
|
||||
vec_iterator<Pointer, false> iterator;
|
||||
typedef typename container_detail::
|
||||
typedef typename boost::container::container_detail::
|
||||
vec_iterator<Pointer, true > const_iterator;
|
||||
#endif //BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
|
||||
typedef std::reverse_iterator<iterator> reverse_iterator;
|
||||
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
|
||||
typedef boost::container::container_detail::
|
||||
reverse_iterator<iterator> reverse_iterator;
|
||||
typedef boost::container::container_detail::
|
||||
reverse_iterator<const_iterator> const_reverse_iterator;
|
||||
};
|
||||
|
||||
template <class Key, class Value, class KeyOfValue,
|
||||
|
||||
@@ -20,10 +20,11 @@
|
||||
|
||||
#include <boost/container/detail/config_begin.hpp>
|
||||
#include <boost/container/detail/workaround.hpp>
|
||||
#include <boost/move/utility_core.hpp>
|
||||
#include <boost/container/allocator_traits.hpp>
|
||||
#include <boost/container/detail/type_traits.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
#include <boost/move/utility_core.hpp>
|
||||
#include <boost/intrusive/detail/iterator.hpp>
|
||||
|
||||
#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
|
||||
#include <boost/container/detail/variadic_templates_tools.hpp>
|
||||
@@ -745,14 +746,15 @@ struct std_iterator<IIterator, false>
|
||||
|
||||
template<class IIterator, bool IsConst>
|
||||
class iterator
|
||||
: public std_iterator<IIterator, IsConst>::type
|
||||
{
|
||||
typedef typename std_iterator<IIterator, IsConst>::type types_t;
|
||||
|
||||
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::pointer pointer;
|
||||
typedef typename types_t::reference reference;
|
||||
typedef typename types_t::difference_type difference_type;
|
||||
typedef typename types_t::iterator_category iterator_category;
|
||||
typedef typename types_t::value_type value_type;
|
||||
|
||||
iterator()
|
||||
{}
|
||||
@@ -808,6 +810,8 @@ class iterator
|
||||
IIterator m_iit;
|
||||
};
|
||||
|
||||
using ::boost::intrusive::detail::reverse_iterator;
|
||||
|
||||
} //namespace container_detail {
|
||||
} //namespace container {
|
||||
} //namespace boost {
|
||||
|
||||
@@ -515,10 +515,10 @@ class tree
|
||||
typedef key_node_compare<value_compare, Node> KeyNodeCompare;
|
||||
|
||||
public:
|
||||
typedef container_detail::iterator<iiterator, false> iterator;
|
||||
typedef container_detail::iterator<iiterator, true > const_iterator;
|
||||
typedef std::reverse_iterator<iterator> reverse_iterator;
|
||||
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
|
||||
typedef container_detail::iterator<iiterator, false> iterator;
|
||||
typedef container_detail::iterator<iiterator, true > const_iterator;
|
||||
typedef container_detail::reverse_iterator<iterator> reverse_iterator;
|
||||
typedef container_detail::reverse_iterator<const_iterator> const_reverse_iterator;
|
||||
|
||||
tree()
|
||||
: AllocHolder(ValComp(key_compare()))
|
||||
|
||||
@@ -199,8 +199,8 @@ class list
|
||||
typedef BOOST_CONTAINER_IMPDEF(NodeAlloc) stored_allocator_type;
|
||||
typedef BOOST_CONTAINER_IMPDEF(iterator_impl) iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(const_iterator_impl) const_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<iterator>) reverse_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<const_iterator>) const_reverse_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(container_detail::reverse_iterator<iterator>) reverse_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(container_detail::reverse_iterator<const_iterator>) const_reverse_iterator;
|
||||
|
||||
//////////////////////////////////////////////
|
||||
//
|
||||
|
||||
@@ -265,6 +265,7 @@ class stable_vector_iterator
|
||||
{}
|
||||
|
||||
stable_vector_iterator() BOOST_CONTAINER_NOEXCEPT
|
||||
: m_pn() //Value initialization to achieve "null iterators" (N3644)
|
||||
{}
|
||||
|
||||
stable_vector_iterator(stable_vector_iterator<Pointer, false> const& other) BOOST_CONTAINER_NOEXCEPT
|
||||
@@ -504,8 +505,8 @@ class stable_vector
|
||||
typedef node_allocator_type stored_allocator_type;
|
||||
typedef BOOST_CONTAINER_IMPDEF(iterator_impl) iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(const_iterator_impl) const_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<iterator>) reverse_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<const_iterator>) const_reverse_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(container_detail::reverse_iterator<iterator>) reverse_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(container_detail::reverse_iterator<const_iterator>) const_reverse_iterator;
|
||||
|
||||
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
||||
private:
|
||||
|
||||
@@ -539,8 +539,8 @@ class basic_string
|
||||
typedef BOOST_CONTAINER_IMPDEF(allocator_type) stored_allocator_type;
|
||||
typedef BOOST_CONTAINER_IMPDEF(pointer) iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(const_pointer) const_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<iterator>) reverse_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<const_iterator>) const_reverse_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(container_detail::reverse_iterator<iterator>) reverse_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(container_detail::reverse_iterator<const_iterator>) const_reverse_iterator;
|
||||
static const size_type npos = size_type(-1);
|
||||
|
||||
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
||||
|
||||
@@ -102,11 +102,7 @@ class vec_iterator
|
||||
|
||||
//Constructors
|
||||
vec_iterator() BOOST_CONTAINER_NOEXCEPT
|
||||
#ifndef NDEBUG
|
||||
: m_ptr()
|
||||
#else
|
||||
// No value initialization of m_ptr() to speed up things a bit:
|
||||
#endif
|
||||
: m_ptr() //Value initialization to achieve "null iterators" (N3644)
|
||||
{}
|
||||
|
||||
vec_iterator(vec_iterator<Pointer, false> const& other) BOOST_CONTAINER_NOEXCEPT
|
||||
@@ -573,8 +569,8 @@ class vector
|
||||
typedef BOOST_CONTAINER_IMPDEF(iterator_impl) iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(const_iterator_impl) const_iterator;
|
||||
#endif
|
||||
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<iterator>) reverse_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<const_iterator>) const_reverse_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(container_detail::reverse_iterator<iterator>) reverse_iterator;
|
||||
typedef BOOST_CONTAINER_IMPDEF(container_detail::reverse_iterator<const_iterator>) const_reverse_iterator;
|
||||
|
||||
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
||||
private:
|
||||
|
||||
Reference in new issue
Block a user