Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 09:44:47

0001 //////////////////////////////////////////////////////////////////////////////
0002 //
0003 // (C) Copyright Ion Gaztanaga 2014-2014.
0004 //
0005 // Distributed under the Boost Software License, Version 1.0.
0006 // (See accompanying file LICENSE_1_0.txt or copy at
0007 // http://www.boost.org/LICENSE_1_0.txt)
0008 //
0009 // See http://www.boost.org/libs/container for documentation.
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 }  //namespace container {
0092 }  //namespace boost {
0093 
0094 #endif   //#ifndef BOOST_CONTAINER_DETAIL_ITERATORS_HPP