5#ifndef ICE_UTIL_FUNCTIONAL_H
6#define ICE_UTIL_FUNCTIONAL_H
10#if !defined(ICE_CPP11_MAPPING) && (ICE_CPLUSPLUS < 201703L)
15namespace IceUtilInternal
23template<
class R,
class T,
class H>
24class MemFun :
public std::unary_function<H, R>
26 typedef R (T::*MemberFN)(void);
31 explicit MemFun(MemberFN p) : _mfn(p) { }
32 R operator()(H handle)
const
34 return (handle.get() ->* _mfn)();
38template<
class R,
class T,
class H,
class A>
39class MemFun1 :
public std::binary_function<H, A, R>
41 typedef R (T::*MemberFN)(A);
46 explicit MemFun1(MemberFN p) : _mfn(p) { }
47 R operator()(H handle, A arg)
const
49 return (handle.get() ->* _mfn)(arg);
53template<
class T,
class H>
54class VoidMemFun :
public std::unary_function<H, void>
56 typedef void (T::*MemberFN)(void);
61 explicit VoidMemFun(MemberFN p) : _mfn(p) { }
62 void operator()(H handle)
const
64 (handle.get() ->* _mfn)();
68template<
class T,
class H,
class A>
69class VoidMemFun1 :
public std::binary_function<H, A, void>
71 typedef void (T::*MemberFN)(A);
76 explicit VoidMemFun1(MemberFN p) : _mfn(p) { }
77 void operator()(H handle, A arg)
const
79 (handle.get() ->* _mfn)(arg);
83template<
class R,
class K,
class T,
class H>
84class SecondMemFun :
public std::unary_function<std::pair<K, H>, R>
86 typedef R (T::*MemberFN)(void);
91 explicit SecondMemFun(MemberFN p) : _mfn(p) { }
92 R operator()(std::pair<K, H> pair)
const
94 return (pair.second.get() ->* _mfn)();
98template<
class R,
class K,
class T,
class H,
class A>
99class SecondMemFun1 :
public std::binary_function<std::pair<K, H>, A, R>
101 typedef R (T::*MemberFN)(A);
106 explicit SecondMemFun1(MemberFN p) : _mfn(p) { }
107 R operator()(std::pair<K, H> pair, A arg)
const
109 return (pair.second.get() ->* _mfn)(arg);
113template<
class K,
class T,
class H>
114class SecondVoidMemFun :
public std::unary_function<std::pair<K, H>, void>
116 typedef void (T::*MemberFN)(void);
121 explicit SecondVoidMemFun(MemberFN p) : _mfn(p) { }
122 void operator()(std::pair<K, H> pair)
const
124 (pair.second.get() ->* _mfn)();
128template<
class K,
class T,
class H,
class A>
129class SecondVoidMemFun1 :
public std::binary_function<std::pair<K, H>, A, void>
131 typedef void (T::*MemberFN)(A);
136 explicit SecondVoidMemFun1(MemberFN p) : _mfn(p) { }
137 void operator()(std::pair<K, H> pair, A arg)
const
139 (pair.second.get() ->* _mfn)(arg);
143template<
class R,
class T,
class H>
144class ConstMemFun :
public std::unary_function<H, R>
146 typedef R (T::*MemberFN)(void)
const;
151 explicit ConstMemFun(MemberFN p) : _mfn(p) { }
152 R operator()(H handle)
const
154 return (handle.get() ->* _mfn)();
158template<
class R,
class T,
class H,
class A>
159class ConstMemFun1 :
public std::binary_function<H, A, R>
161 typedef R (T::*MemberFN)(A)
const;
166 explicit ConstMemFun1(MemberFN p) : _mfn(p) { }
167 R operator()(H handle, A arg)
const
169 return (handle.get() ->* _mfn)(arg);
173template<
class T,
class H>
174class ConstVoidMemFun :
public std::unary_function<H, void>
176 typedef void (T::*MemberFN)(void)
const;
181 explicit ConstVoidMemFun(MemberFN p) : _mfn(p) { }
182 void operator()(H handle)
const
184 (handle.get() ->* _mfn)();
188template<
class T,
class H,
class A>
189class ConstVoidMemFun1 :
public std::binary_function<H, A, void>
191 typedef void (T::*MemberFN)(A)
const;
196 explicit ConstVoidMemFun1(MemberFN p) : _mfn(p) { }
197 void operator()(H handle, A arg)
const
199 (handle.get() ->* _mfn)(arg);
203template<
class R,
class K,
class T,
class H>
204class SecondConstMemFun :
public std::unary_function<std::pair<K, H>, R>
206 typedef R (T::*MemberFN)(void)
const;
211 explicit SecondConstMemFun(MemberFN p) : _mfn(p) { }
212 R operator()(std::pair<K, H> pair)
const
214 return (pair.second.get() ->* _mfn)();
218template<
class R,
class K,
class T,
class H,
class A>
219class SecondConstMemFun1 :
public std::binary_function<std::pair<K, H>, A, R>
221 typedef R (T::*MemberFN)(A)
const;
226 explicit SecondConstMemFun1(MemberFN p) : _mfn(p) { }
227 R operator()(std::pair<K, H> pair, A arg)
const
229 return (pair.second.get() ->* _mfn)(arg);
233template<
class K,
class T,
class H>
234class SecondConstVoidMemFun :
public std::unary_function<std::pair<K, H>, void>
236 typedef void (T::*MemberFN)(void)
const;
241 explicit SecondConstVoidMemFun(MemberFN p) : _mfn(p) { }
242 void operator()(std::pair<K, H> pair)
const
244 (pair.second.get() ->* _mfn)();
248template<
class K,
class T,
class H,
class A>
249class SecondConstVoidMemFun1 :
public std::binary_function<std::pair<K, H>, A, void>
251 typedef void (T::*MemberFN)(A)
const;
256 explicit SecondConstVoidMemFun1(MemberFN p) : _mfn(p) { }
257 void operator()(std::pair<K, H> pair, A arg)
const
259 (pair.second.get() ->* _mfn)(arg);
273template<
class R,
class T>
274inline ::IceUtilInternal::MemFun<R, T, Handle<T> >
277 return ::IceUtilInternal::MemFun<R, T, Handle<T> >(p);
280template<
class R,
class T,
class A>
281inline ::IceUtilInternal::MemFun1<R, T, Handle<T>, A>
284 return ::IceUtilInternal::MemFun1<R, T, Handle<T>, A>(p);
288inline ::IceUtilInternal::VoidMemFun<T, Handle<T> >
291 return ::IceUtilInternal::VoidMemFun<T, Handle<T> >(p);
294template<
class T,
class A>
295inline ::IceUtilInternal::VoidMemFun1<T, Handle<T>, A>
298 return ::IceUtilInternal::VoidMemFun1<T, Handle<T>, A>(p);
301template<
class R,
class K,
class T>
302inline ::IceUtilInternal::SecondMemFun<R, K, T, Handle<T> >
305 return ::IceUtilInternal::SecondMemFun<R, K, T, Handle<T> >(p);
308template<
class R,
class K,
class T,
class A>
309inline ::IceUtilInternal::SecondMemFun1<R, K, T, Handle<T>, A>
312 return ::IceUtilInternal::SecondMemFun1<R, K, T, Handle<T>, A>(p);
315template<
class K,
class T>
316inline ::IceUtilInternal::SecondVoidMemFun<K, T, Handle<T> >
319 return ::IceUtilInternal::SecondVoidMemFun<K, T, Handle<T> >(p);
322template<
class K,
class T,
class A>
323inline ::IceUtilInternal::SecondVoidMemFun1<K, T, Handle<T>, A>
326 return ::IceUtilInternal::SecondVoidMemFun1<K, T, Handle<T>, A>(p);
329template<
class R,
class T>
330inline ::IceUtilInternal::ConstMemFun<R, T, Handle<T> >
333 return ::IceUtilInternal::ConstMemFun<R, T, Handle<T> >(p);
336template<
class R,
class T,
class A>
337inline ::IceUtilInternal::ConstMemFun1<R, T, Handle<T>, A>
340 return ::IceUtilInternal::ConstMemFun1<R, T, Handle<T>, A>(p);
344inline ::IceUtilInternal::ConstVoidMemFun<T, Handle<T> >
347 return ::IceUtilInternal::ConstVoidMemFun<T, Handle<T> >(p);
350template<
class T,
class A>
351inline ::IceUtilInternal::ConstVoidMemFun1<T, Handle<T>, A>
354 return ::IceUtilInternal::ConstVoidMemFun1<T, Handle<T>, A>(p);
357template<
class R,
class K,
class T>
358inline ::IceUtilInternal::SecondConstMemFun<R, K, T, Handle<T> >
361 return ::IceUtilInternal::SecondConstMemFun<R, K, T, Handle<T> >(p);
364template<
class R,
class K,
class T,
class A>
365inline ::IceUtilInternal::SecondConstMemFun1<R, K, T, Handle<T>, A>
368 return ::IceUtilInternal::SecondConstMemFun1<R, K, T, Handle<T>, A>(p);
371template<
class K,
class T>
372inline ::IceUtilInternal::SecondConstVoidMemFun<K, T, Handle<T> >
375 return ::IceUtilInternal::SecondConstVoidMemFun<K, T, Handle<T> >(p);
378template<
class K,
class T,
class A>
379inline ::IceUtilInternal::SecondConstVoidMemFun1<K, T, Handle<T>, A>
382 return ::IceUtilInternal::SecondConstVoidMemFun1<K, T, Handle<T>, A>(p);
inline ::IceUtilInternal::MemFun< R, T, Handle< T > > memFun(R(T::*p)(void))
Definition Functional.h:275
inline ::IceUtilInternal::SecondConstVoidMemFun< K, T, Handle< T > > secondConstVoidMemFun(void(T::*p)(void) const)
Definition Functional.h:373
inline ::IceUtilInternal::ConstVoidMemFun< T, Handle< T > > constVoidMemFun(void(T::*p)(void) const)
Definition Functional.h:345
inline ::IceUtilInternal::SecondConstMemFun< R, K, T, Handle< T > > secondConstMemFun(R(T::*p)(void) const)
Definition Functional.h:359
inline ::IceUtilInternal::SecondVoidMemFun< K, T, Handle< T > > secondVoidMemFun(void(T::*p)(void))
Definition Functional.h:317
inline ::IceUtilInternal::VoidMemFun< T, Handle< T > > voidMemFun(void(T::*p)(void))
Definition Functional.h:289
inline ::IceUtilInternal::VoidMemFun1< T, Handle< T >, A > voidMemFun1(void(T::*p)(A))
Definition Functional.h:296
inline ::IceUtilInternal::MemFun1< R, T, Handle< T >, A > memFun1(R(T::*p)(A))
Definition Functional.h:282
inline ::IceUtilInternal::ConstVoidMemFun1< T, Handle< T >, A > constVoidMemFun1(void(T::*p)(A) const)
Definition Functional.h:352
inline ::IceUtilInternal::ConstMemFun< R, T, Handle< T > > constMemFun(R(T::*p)(void) const)
Definition Functional.h:331
inline ::IceUtilInternal::SecondConstVoidMemFun1< K, T, Handle< T >, A > secondConstVoidMemFun1(void(T::*p)(A) const)
Definition Functional.h:380
inline ::IceUtilInternal::SecondVoidMemFun1< K, T, Handle< T >, A > secondVoidMemFun1(void(T::*p)(A))
Definition Functional.h:324
inline ::IceUtilInternal::SecondMemFun1< R, K, T, Handle< T >, A > secondMemFun1(R(T::*p)(A))
Definition Functional.h:310
inline ::IceUtilInternal::ConstMemFun1< R, T, Handle< T >, A > constMemFun1(R(T::*p)(A) const)
Definition Functional.h:338
inline ::IceUtilInternal::SecondMemFun< R, K, T, Handle< T > > secondMemFun(R(T::*p)(void))
Definition Functional.h:303
inline ::IceUtilInternal::SecondConstMemFun1< R, K, T, Handle< T >, A > secondConstMemFun1(R(T::*p)(A) const)
Definition Functional.h:366