| // (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 { |
| |
| 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 boost |
| |
| #endif // BOOST_FUNCTION_OUTPUT_ITERATOR_HPP |