////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 2014-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/container for documentation. // ////////////////////////////////////////////////////////////////////////////// #ifndef BOOST_CONTAINER_DETAIL_ITERATOR_HPP #define BOOST_CONTAINER_DETAIL_ITERATOR_HPP #ifndef BOOST_CONFIG_HPP # include #endif #if defined(BOOST_HAS_PRAGMA_ONCE) # pragma once #endif #include #include #include namespace boost { namespace container { using ::boost::intrusive::iterator_traits; using ::boost::intrusive::iter_difference; using ::boost::intrusive::iter_category; using ::boost::intrusive::iter_value; using ::boost::intrusive::iter_size; using ::boost::intrusive::iterator_distance; using ::boost::intrusive::iterator_udistance; using ::boost::intrusive::iterator_advance; using ::boost::intrusive::iterator_uadvance; using ::boost::intrusive::make_iterator_advance; using ::boost::intrusive::make_iterator_uadvance; using ::boost::intrusive::iterator; using ::boost::intrusive::iterator_enable_if_tag; using ::boost::intrusive::iterator_disable_if_tag; using ::boost::intrusive::iterator_arrow_result; template class back_emplacer { private: Container& container; public: typedef std::output_iterator_tag iterator_category; typedef void value_type; typedef void difference_type; typedef void pointer; typedef void reference; back_emplacer(Container& x) : container(x) {} template back_emplacer& operator=(BOOST_FWD_REF(U) value) { container.emplace_back(boost::forward(value)); return *this; } back_emplacer& operator*() { return *this; } back_emplacer& operator++() { return *this; } back_emplacer& operator++(int){ return *this; } }; #ifndef BOOST_CONTAINER_NO_CXX17_CTAD template using it_based_non_const_first_type_t = typename dtl::remove_const::value_type::first_type>::type; template using it_based_const_first_type_t = const typename dtl::remove_const::value_type::first_type>::type; template using it_based_second_type_t = typename iterator_traits::value_type::second_type; template using it_based_value_type_t = typename iterator_traits::value_type; #endif } //namespace container { } //namespace boost { #endif //#ifndef BOOST_CONTAINER_DETAIL_ITERATORS_HPP