00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00049 #ifndef STLSOFT_INCL_STLSOFT_ITERATORS_HPP_UNARY_FUNCTION_OUTPUT_ITERATOR_ADAPTOR
00050 #define STLSOFT_INCL_STLSOFT_ITERATORS_HPP_UNARY_FUNCTION_OUTPUT_ITERATOR_ADAPTOR
00051
00052 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00053 # define STLSOFT_VER_STLSOFT_ITERATORS_HPP_UNARY_FUNCTION_OUTPUT_ITERATOR_ADAPTOR_MAJOR 2
00054 # define STLSOFT_VER_STLSOFT_ITERATORS_HPP_UNARY_FUNCTION_OUTPUT_ITERATOR_ADAPTOR_MINOR 0
00055 # define STLSOFT_VER_STLSOFT_ITERATORS_HPP_UNARY_FUNCTION_OUTPUT_ITERATOR_ADAPTOR_REVISION 1
00056 # define STLSOFT_VER_STLSOFT_ITERATORS_HPP_UNARY_FUNCTION_OUTPUT_ITERATOR_ADAPTOR_EDIT 14
00057 #endif
00058
00059
00060
00061
00062
00063 #ifndef STLSOFT_INCL_STLSOFT_H_STLSOFT
00064 # include <stlsoft/stlsoft.h>
00065 #endif
00066 #ifndef STLSOFT_INCL_STLSOFT_UTIL_STD_HPP_ITERATOR_HELPER
00067 # include <stlsoft/util/std/iterator_helper.hpp>
00068 #endif
00069
00070
00071
00072
00073
00074 #ifndef _STLSOFT_NO_NAMESPACE
00075 namespace stlsoft
00076 {
00077 #endif
00078
00079
00080
00081
00082
00090 template <ss_typename_param_k F>
00091 struct unary_function_output_iterator_adaptor
00092 {
00095 public:
00096 typedef F function_class_type;
00097 typedef unary_function_output_iterator_adaptor<F> class_type;
00098
00099 public:
00100 typedef stlsoft_ns_qual_std(output_iterator_tag) iterator_category;
00101 typedef void value_type;
00102 typedef void pointer;
00103 typedef void reference;
00104 typedef ss_ptrdiff_t difference_type;
00105 private:
00106 class deref_proxy;
00107 friend class deref_proxy;
00109
00112 private:
00113 class deref_proxy
00114 {
00115 public:
00116 deref_proxy(unary_function_output_iterator_adaptor<F> *it)
00117 : m_it(it)
00118 {}
00119
00120 public:
00121 template <ss_typename_param_k A>
00122 void operator =(A const& arg)
00123 {
00124 m_it->invoke_(arg);
00125 }
00126
00127 private:
00128 unary_function_output_iterator_adaptor<F> *const m_it;
00129
00130
00131 private:
00132 void operator =(deref_proxy const&);
00133 };
00135
00138 public:
00140 class_type& operator ++()
00141 {
00142 return *this;
00143 }
00145 class_type operator ++(int)
00146 {
00147 return *this;
00148 }
00149
00151 deref_proxy operator *()
00152 {
00153 return deref_proxy(this);
00154 }
00155
00157
00160 private:
00161 template <ss_typename_param_k A>
00162 void invoke_(A const& arg)
00163 {
00164 (*static_cast<function_class_type*>(this))(arg);
00165 }
00167
00168 private:
00169 void operator =(class_type const&);
00170 };
00171
00172
00173
00174 #ifndef _STLSOFT_NO_NAMESPACE
00175 }
00176 #endif
00177
00178
00179
00180 #endif
00181
00182