text: /*=============================================================================
    Copyright (c) 2011-2017 Bolero MURAKAMI
    https://github.com/bolero-MURAKAMI/Sprout
  
    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)
  =============================================================================*/
  #ifndef SPROUT_ALGORITHM_FIT_COPY_N_HPP
  #define SPROUT_ALGORITHM_FIT_COPY_N_HPP
  
  #include <sprout/config.hpp>
  #include <sprout/container/traits.hpp>
  #include <sprout/container/functions.hpp>
  #include <sprout/algorithm/fixed/copy_n.hpp>
  #include <sprout/algorithm/fit/results.hpp>
  #include <sprout/sub_array/sub_array.hpp>
  #include <sprout/sub_array/sub.hpp>
  
  namespace sprout {
  	namespace fit {
  		namespace detail {
  			template<typename InputIterator, typename Size, typename Result>
  			inline SPROUT_CONSTEXPR typename sprout::fit::results::algorithm<Result>::type
  			copy_n_impl(
  				InputIterator const& first, Size n, Result const& result,
  				typename sprout::container_traits<Result>::difference_type offset
  				)
  			{
  				return sprout::sub_copy(
  					sprout::get_internal(sprout::fixed::copy_n(first, n, result)),
  					offset,
  					offset + sprout::fit_size(result, n)
  					);
  			}
  		}	// namespace detail
  		//
  		// copy_n
  		//
  		template<typename InputIterator, typename Size, typename Result>
  		inline SPROUT_CONSTEXPR typename sprout::fit::results::algorithm<Result>::type
  		copy_n(InputIterator first, Size n, Result const& result) {
  			return sprout::fit::detail::copy_n_impl(first, n, result, sprout::internal_begin_offset(result));
  		}
  	}	// namespace fit
  }	// namespace sprout
  
  #endif	// #ifndef SPROUT_ALGORITHM_FIT_COPY_N_HPP
  