// (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 |