63 lines
1.7 KiB
C++
63 lines
1.7 KiB
C++
// (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
|