63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								// (C) Copyright Jeremy Siek 2001.
							 | 
						||
| 
								 | 
							
								// 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)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Revision History:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 27 Feb 2001   Jeremy Siek
							 | 
						||
| 
								 | 
							
								//      Initial checkin.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_FUNCTION_OUTPUT_ITERATOR_HPP
							 | 
						||
| 
								 | 
							
								#define BOOST_FUNCTION_OUTPUT_ITERATOR_HPP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <iterator>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost {
							 | 
						||
| 
								 | 
							
								namespace iterators {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  template <class UnaryFunction>
							 | 
						||
| 
								 | 
							
								  class function_output_iterator {
							 | 
						||
| 
								 | 
							
								    typedef function_output_iterator self;
							 | 
						||
| 
								 | 
							
								  public:
							 | 
						||
| 
								 | 
							
								    typedef std::output_iterator_tag iterator_category;
							 | 
						||
| 
								 | 
							
								    typedef void                value_type;
							 | 
						||
| 
								 | 
							
								    typedef void                difference_type;
							 | 
						||
| 
								 | 
							
								    typedef void                pointer;
							 | 
						||
| 
								 | 
							
								    typedef void                reference;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    explicit function_output_iterator() {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    explicit function_output_iterator(const UnaryFunction& f)
							 | 
						||
| 
								 | 
							
								      : m_f(f) {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    struct output_proxy {
							 | 
						||
| 
								 | 
							
								      output_proxy(UnaryFunction& f) : m_f(f) { }
							 | 
						||
| 
								 | 
							
								      template <class T> output_proxy& operator=(const T& value) {
							 | 
						||
| 
								 | 
							
								        m_f(value);
							 | 
						||
| 
								 | 
							
								        return *this;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      UnaryFunction& m_f;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    output_proxy operator*() { return output_proxy(m_f); }
							 | 
						||
| 
								 | 
							
								    self& operator++() { return *this; }
							 | 
						||
| 
								 | 
							
								    self& operator++(int) { return *this; }
							 | 
						||
| 
								 | 
							
								  private:
							 | 
						||
| 
								 | 
							
								    UnaryFunction m_f;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  template <class UnaryFunction>
							 | 
						||
| 
								 | 
							
								  inline function_output_iterator<UnaryFunction>
							 | 
						||
| 
								 | 
							
								  make_function_output_iterator(const UnaryFunction& f = UnaryFunction()) {
							 | 
						||
| 
								 | 
							
								    return function_output_iterator<UnaryFunction>(f);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace iterators
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								using iterators::function_output_iterator;
							 | 
						||
| 
								 | 
							
								using iterators::make_function_output_iterator;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace boost
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // BOOST_FUNCTION_OUTPUT_ITERATOR_HPP
							 |