168 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //////////////////////////////////////////////////////////////////////////////
 | |
| //
 | |
| // (C) Copyright Ion Gaztanaga 2012-2012.
 | |
| // 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/move for documentation.
 | |
| //
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| //! \file
 | |
| 
 | |
| #ifndef BOOST_MOVE_ALGORITHM_HPP
 | |
| #define BOOST_MOVE_ALGORITHM_HPP
 | |
| 
 | |
| #ifndef BOOST_CONFIG_HPP
 | |
| #  include <boost/config.hpp>
 | |
| #endif
 | |
| #
 | |
| #if defined(BOOST_HAS_PRAGMA_ONCE)
 | |
| #  pragma once
 | |
| #endif
 | |
| 
 | |
| #include <boost/move/detail/config_begin.hpp>
 | |
| 
 | |
| #include <boost/move/utility_core.hpp>
 | |
| #include <boost/move/iterator.hpp>
 | |
| #include <boost/move/algo/move.hpp>
 | |
| #include <boost/detail/no_exceptions_support.hpp>
 | |
| 
 | |
| #include <algorithm> //copy, copy_backward
 | |
| #include <memory>    //uninitialized_copy
 | |
| 
 | |
| namespace boost {
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //
 | |
| //                            uninitialized_copy_or_move
 | |
| //
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| namespace move_detail {
 | |
| 
 | |
| template
 | |
| <typename I,   // I models InputIterator
 | |
| typename F>   // F models ForwardIterator
 | |
| inline F uninitialized_move_move_iterator(I f, I l, F r
 | |
| //                             ,typename ::boost::move_detail::enable_if< has_move_emulation_enabled<typename I::value_type> >::type* = 0
 | |
| )
 | |
| {
 | |
|    return ::boost::uninitialized_move(f, l, r);
 | |
| }
 | |
| /*
 | |
| template
 | |
| <typename I,   // I models InputIterator
 | |
| typename F>   // F models ForwardIterator
 | |
| F uninitialized_move_move_iterator(I f, I l, F r,
 | |
|                                    typename ::boost::move_detail::disable_if< has_move_emulation_enabled<typename I::value_type> >::type* = 0)
 | |
| {
 | |
|    return std::uninitialized_copy(f.base(), l.base(), r);
 | |
| }
 | |
| */
 | |
| }  //namespace move_detail {
 | |
| 
 | |
| template
 | |
| <typename I,   // I models InputIterator
 | |
| typename F>   // F models ForwardIterator
 | |
| inline F uninitialized_copy_or_move(I f, I l, F r,
 | |
|                              typename ::boost::move_detail::enable_if< move_detail::is_move_iterator<I> >::type* = 0)
 | |
| {
 | |
|    return ::boost::move_detail::uninitialized_move_move_iterator(f, l, r);
 | |
| }
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //
 | |
| //                            copy_or_move
 | |
| //
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| namespace move_detail {
 | |
| 
 | |
| template
 | |
| <typename I,   // I models InputIterator
 | |
| typename F>   // F models ForwardIterator
 | |
| inline F move_move_iterator(I f, I l, F r
 | |
| //                             ,typename ::boost::move_detail::enable_if< has_move_emulation_enabled<typename I::value_type> >::type* = 0
 | |
| )
 | |
| {
 | |
|    return ::boost::move(f, l, r);
 | |
| }
 | |
| /*
 | |
| template
 | |
| <typename I,   // I models InputIterator
 | |
| typename F>   // F models ForwardIterator
 | |
| F move_move_iterator(I f, I l, F r,
 | |
|                                    typename ::boost::move_detail::disable_if< has_move_emulation_enabled<typename I::value_type> >::type* = 0)
 | |
| {
 | |
|    return std::copy(f.base(), l.base(), r);
 | |
| }
 | |
| */
 | |
| 
 | |
| }  //namespace move_detail {
 | |
| 
 | |
| template
 | |
| <typename I,   // I models InputIterator
 | |
| typename F>   // F models ForwardIterator
 | |
| inline F copy_or_move(I f, I l, F r,
 | |
|                              typename ::boost::move_detail::enable_if< move_detail::is_move_iterator<I> >::type* = 0)
 | |
| {
 | |
|    return ::boost::move_detail::move_move_iterator(f, l, r);
 | |
| }
 | |
| 
 | |
| /// @endcond
 | |
| 
 | |
| //! <b>Effects</b>:
 | |
| //!   \code
 | |
| //!   for (; first != last; ++result, ++first)
 | |
| //!      new (static_cast<void*>(&*result))
 | |
| //!         typename iterator_traits<ForwardIterator>::value_type(*first);
 | |
| //!   \endcode
 | |
| //!
 | |
| //! <b>Returns</b>: result
 | |
| //!
 | |
| //! <b>Note</b>: This function is provided because
 | |
| //!   <i>std::uninitialized_copy</i> from some STL implementations
 | |
| //!    is not compatible with <i>move_iterator</i>
 | |
| template
 | |
| <typename I,   // I models InputIterator
 | |
| typename F>   // F models ForwardIterator
 | |
| inline F uninitialized_copy_or_move(I f, I l, F r
 | |
|    /// @cond
 | |
|    ,typename ::boost::move_detail::disable_if< move_detail::is_move_iterator<I> >::type* = 0
 | |
|    /// @endcond
 | |
|    )
 | |
| {
 | |
|    return std::uninitialized_copy(f, l, r);
 | |
| }
 | |
| 
 | |
| //! <b>Effects</b>:
 | |
| //!   \code
 | |
| //!   for (; first != last; ++result, ++first)
 | |
| //!      *result = *first;
 | |
| //!   \endcode
 | |
| //!
 | |
| //! <b>Returns</b>: result
 | |
| //!
 | |
| //! <b>Note</b>: This function is provided because
 | |
| //!   <i>std::uninitialized_copy</i> from some STL implementations
 | |
| //!    is not compatible with <i>move_iterator</i>
 | |
| template
 | |
| <typename I,   // I models InputIterator
 | |
| typename F>   // F models ForwardIterator
 | |
| inline F copy_or_move(I f, I l, F r
 | |
|    /// @cond
 | |
|    ,typename ::boost::move_detail::disable_if< move_detail::is_move_iterator<I> >::type* = 0
 | |
|    /// @endcond
 | |
|    )
 | |
| {
 | |
|    return std::copy(f, l, r);
 | |
| }
 | |
| 
 | |
| }  //namespace boost {
 | |
| 
 | |
| #include <boost/move/detail/config_end.hpp>
 | |
| 
 | |
| #endif //#ifndef BOOST_MOVE_ALGORITHM_HPP
 | 
