Chris@16: // (C) Copyright Jeremy Siek 2001. Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: // Revision History: Chris@16: Chris@16: // 27 Feb 2001 Jeremy Siek Chris@16: // Initial checkin. Chris@16: Chris@16: #ifndef BOOST_FUNCTION_OUTPUT_ITERATOR_HPP Chris@16: #define BOOST_FUNCTION_OUTPUT_ITERATOR_HPP Chris@16: Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@101: namespace iterators { Chris@16: Chris@16: template Chris@16: class function_output_iterator { Chris@16: typedef function_output_iterator self; Chris@16: public: Chris@16: typedef std::output_iterator_tag iterator_category; Chris@16: typedef void value_type; Chris@16: typedef void difference_type; Chris@16: typedef void pointer; Chris@16: typedef void reference; Chris@16: Chris@16: explicit function_output_iterator() {} Chris@16: Chris@16: explicit function_output_iterator(const UnaryFunction& f) Chris@16: : m_f(f) {} Chris@16: Chris@16: struct output_proxy { Chris@16: output_proxy(UnaryFunction& f) : m_f(f) { } Chris@16: template output_proxy& operator=(const T& value) { Chris@101: m_f(value); Chris@101: return *this; Chris@16: } Chris@16: UnaryFunction& m_f; Chris@16: }; Chris@16: output_proxy operator*() { return output_proxy(m_f); } Chris@101: self& operator++() { return *this; } Chris@16: self& operator++(int) { return *this; } Chris@16: private: Chris@16: UnaryFunction m_f; Chris@16: }; Chris@16: Chris@16: template Chris@16: inline function_output_iterator Chris@16: make_function_output_iterator(const UnaryFunction& f = UnaryFunction()) { Chris@16: return function_output_iterator(f); Chris@16: } Chris@16: Chris@101: } // namespace iterators Chris@101: Chris@101: using iterators::function_output_iterator; Chris@101: using iterators::make_function_output_iterator; Chris@101: Chris@16: } // namespace boost Chris@16: Chris@16: #endif // BOOST_FUNCTION_OUTPUT_ITERATOR_HPP