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 |