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