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