mirror of
				https://github.com/boostorg/iterator.git
				synced 2025-11-04 02:11:37 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			64 lines
		
	
	
		
			1021 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1021 B
		
	
	
	
		
			C++
		
	
	
	
	
	
//
 | 
						|
// Copyright 2014 Peter Dimov
 | 
						|
//
 | 
						|
// 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
 | 
						|
//
 | 
						|
 | 
						|
#include <boost/generator_iterator.hpp>
 | 
						|
#include <boost/detail/lightweight_test.hpp>
 | 
						|
#include <algorithm>
 | 
						|
 | 
						|
class X
 | 
						|
{
 | 
						|
private:
 | 
						|
 | 
						|
    int v;
 | 
						|
 | 
						|
public:
 | 
						|
 | 
						|
    typedef int result_type;
 | 
						|
 | 
						|
    X(): v( 0 )
 | 
						|
    {
 | 
						|
    }
 | 
						|
 | 
						|
    int operator()()
 | 
						|
    {
 | 
						|
        return ++v;
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
template<class InputIterator, class Size, class OutputIterator> OutputIterator copy_n( InputIterator first, Size n, OutputIterator result )
 | 
						|
{
 | 
						|
    while( n-- > 0 )
 | 
						|
    {
 | 
						|
        *result++ = *first++;
 | 
						|
    }
 | 
						|
 | 
						|
    return result;
 | 
						|
}
 | 
						|
 | 
						|
void copy_test()
 | 
						|
{
 | 
						|
    X x;
 | 
						|
    boost::generator_iterator<X> in( &x );
 | 
						|
 | 
						|
    int const N = 4;
 | 
						|
    int v[ N ] = { 0 };
 | 
						|
 | 
						|
    ::copy_n( in, 4, v );
 | 
						|
 | 
						|
    BOOST_TEST_EQ( v[0], 1 );
 | 
						|
    BOOST_TEST_EQ( v[1], 2 );
 | 
						|
    BOOST_TEST_EQ( v[2], 3 );
 | 
						|
    BOOST_TEST_EQ( v[3], 4 );
 | 
						|
}
 | 
						|
 | 
						|
int main()
 | 
						|
{
 | 
						|
    copy_test();
 | 
						|
    return boost::report_errors();
 | 
						|
}
 |