File indexing completed on 2025-12-16 09:44:47
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef BOOST_CONTAINER_DETAIL_ITERATOR_HPP
0014 #define BOOST_CONTAINER_DETAIL_ITERATOR_HPP
0015
0016 #ifndef BOOST_CONFIG_HPP
0017 # include <boost/config.hpp>
0018 #endif
0019
0020 #if defined(BOOST_HAS_PRAGMA_ONCE)
0021 # pragma once
0022 #endif
0023
0024 #include <boost/intrusive/detail/iterator.hpp>
0025 #include <boost/move/utility_core.hpp>
0026 #include <boost/container/detail/mpl.hpp>
0027
0028 namespace boost {
0029 namespace container {
0030
0031 using ::boost::intrusive::iterator_traits;
0032 using ::boost::intrusive::iter_difference;
0033 using ::boost::intrusive::iter_category;
0034 using ::boost::intrusive::iter_value;
0035 using ::boost::intrusive::iter_size;
0036 using ::boost::intrusive::iterator_distance;
0037 using ::boost::intrusive::iterator_udistance;
0038 using ::boost::intrusive::iterator_advance;
0039 using ::boost::intrusive::iterator_uadvance;
0040 using ::boost::intrusive::make_iterator_advance;
0041 using ::boost::intrusive::make_iterator_uadvance;
0042 using ::boost::intrusive::iterator;
0043 using ::boost::intrusive::iterator_enable_if_tag;
0044 using ::boost::intrusive::iterator_disable_if_tag;
0045 using ::boost::intrusive::iterator_arrow_result;
0046
0047 template <class Container>
0048 class back_emplacer
0049 {
0050 private:
0051 Container& container;
0052
0053 public:
0054 typedef std::output_iterator_tag iterator_category;
0055 typedef void value_type;
0056 typedef void difference_type;
0057 typedef void pointer;
0058 typedef void reference;
0059
0060 back_emplacer(Container& x)
0061 : container(x)
0062 {}
0063
0064 template<class U>
0065 back_emplacer& operator=(BOOST_FWD_REF(U) value)
0066 {
0067 container.emplace_back(boost::forward<U>(value));
0068 return *this;
0069 }
0070 back_emplacer& operator*() { return *this; }
0071 back_emplacer& operator++() { return *this; }
0072 back_emplacer& operator++(int){ return *this; }
0073 };
0074
0075 #ifndef BOOST_CONTAINER_NO_CXX17_CTAD
0076
0077 template<class InputIterator>
0078 using it_based_non_const_first_type_t = typename dtl::remove_const<typename iterator_traits<InputIterator>::value_type::first_type>::type;
0079
0080 template<class InputIterator>
0081 using it_based_const_first_type_t = const typename dtl::remove_const<typename iterator_traits<InputIterator>::value_type::first_type>::type;
0082
0083 template<class InputIterator>
0084 using it_based_second_type_t = typename iterator_traits<InputIterator>::value_type::second_type;
0085
0086 template<class InputIterator>
0087 using it_based_value_type_t = typename iterator_traits<InputIterator>::value_type;
0088
0089 #endif
0090
0091 }
0092 }
0093
0094 #endif