Chris@16
|
1 // (C) Copyright Jeremy Siek 2001.
|
Chris@16
|
2 // Distributed under the Boost Software License, Version 1.0. (See
|
Chris@16
|
3 // accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
4 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
5
|
Chris@16
|
6 // Revision History:
|
Chris@16
|
7
|
Chris@16
|
8 // 27 Feb 2001 Jeremy Siek
|
Chris@16
|
9 // Initial checkin.
|
Chris@16
|
10
|
Chris@16
|
11 #ifndef BOOST_FUNCTION_OUTPUT_ITERATOR_HPP
|
Chris@16
|
12 #define BOOST_FUNCTION_OUTPUT_ITERATOR_HPP
|
Chris@16
|
13
|
Chris@16
|
14 #include <iterator>
|
Chris@16
|
15
|
Chris@16
|
16 namespace boost {
|
Chris@101
|
17 namespace iterators {
|
Chris@16
|
18
|
Chris@16
|
19 template <class UnaryFunction>
|
Chris@16
|
20 class function_output_iterator {
|
Chris@16
|
21 typedef function_output_iterator self;
|
Chris@16
|
22 public:
|
Chris@16
|
23 typedef std::output_iterator_tag iterator_category;
|
Chris@16
|
24 typedef void value_type;
|
Chris@16
|
25 typedef void difference_type;
|
Chris@16
|
26 typedef void pointer;
|
Chris@16
|
27 typedef void reference;
|
Chris@16
|
28
|
Chris@16
|
29 explicit function_output_iterator() {}
|
Chris@16
|
30
|
Chris@16
|
31 explicit function_output_iterator(const UnaryFunction& f)
|
Chris@16
|
32 : m_f(f) {}
|
Chris@16
|
33
|
Chris@16
|
34 struct output_proxy {
|
Chris@16
|
35 output_proxy(UnaryFunction& f) : m_f(f) { }
|
Chris@16
|
36 template <class T> output_proxy& operator=(const T& value) {
|
Chris@101
|
37 m_f(value);
|
Chris@101
|
38 return *this;
|
Chris@16
|
39 }
|
Chris@16
|
40 UnaryFunction& m_f;
|
Chris@16
|
41 };
|
Chris@16
|
42 output_proxy operator*() { return output_proxy(m_f); }
|
Chris@101
|
43 self& operator++() { return *this; }
|
Chris@16
|
44 self& operator++(int) { return *this; }
|
Chris@16
|
45 private:
|
Chris@16
|
46 UnaryFunction m_f;
|
Chris@16
|
47 };
|
Chris@16
|
48
|
Chris@16
|
49 template <class UnaryFunction>
|
Chris@16
|
50 inline function_output_iterator<UnaryFunction>
|
Chris@16
|
51 make_function_output_iterator(const UnaryFunction& f = UnaryFunction()) {
|
Chris@16
|
52 return function_output_iterator<UnaryFunction>(f);
|
Chris@16
|
53 }
|
Chris@16
|
54
|
Chris@101
|
55 } // namespace iterators
|
Chris@101
|
56
|
Chris@101
|
57 using iterators::function_output_iterator;
|
Chris@101
|
58 using iterators::make_function_output_iterator;
|
Chris@101
|
59
|
Chris@16
|
60 } // namespace boost
|
Chris@16
|
61
|
Chris@16
|
62 #endif // BOOST_FUNCTION_OUTPUT_ITERATOR_HPP
|