1 // -*- C++ -*-
2 //===----------------------------------------------------------------------===//
3 //
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef _LIBCPP___FUNCTIONAL_MEM_FUN_REF_H
11 #define _LIBCPP___FUNCTIONAL_MEM_FUN_REF_H
12
13 #include <__config>
14 #include <__functional/unary_function.h>
15 #include <__functional/binary_function.h>
16
17 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
18 #pragma GCC system_header
19 #endif
20
21 _LIBCPP_BEGIN_NAMESPACE_STD
22
23 #if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
24
25 template<class _Sp, class _Tp>
26 class _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 mem_fun_t
27 : public unary_function<_Tp*, _Sp>
28 {
29 _Sp (_Tp::*__p_)();
30 public:
mem_fun_t(_Sp (_Tp::* __p)())31 _LIBCPP_INLINE_VISIBILITY explicit mem_fun_t(_Sp (_Tp::*__p)())
32 : __p_(__p) {}
operator()33 _LIBCPP_INLINE_VISIBILITY _Sp operator()(_Tp* __p) const
34 {return (__p->*__p_)();}
35 };
36
37 template<class _Sp, class _Tp, class _Ap>
38 class _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 mem_fun1_t
39 : public binary_function<_Tp*, _Ap, _Sp>
40 {
41 _Sp (_Tp::*__p_)(_Ap);
42 public:
mem_fun1_t(_Sp (_Tp::* __p)(_Ap))43 _LIBCPP_INLINE_VISIBILITY explicit mem_fun1_t(_Sp (_Tp::*__p)(_Ap))
44 : __p_(__p) {}
operator()45 _LIBCPP_INLINE_VISIBILITY _Sp operator()(_Tp* __p, _Ap __x) const
46 {return (__p->*__p_)(__x);}
47 };
48
49 template<class _Sp, class _Tp>
50 _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
51 mem_fun_t<_Sp,_Tp>
mem_fun(_Sp (_Tp::* __f)())52 mem_fun(_Sp (_Tp::*__f)())
53 {return mem_fun_t<_Sp,_Tp>(__f);}
54
55 template<class _Sp, class _Tp, class _Ap>
56 _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
57 mem_fun1_t<_Sp,_Tp,_Ap>
mem_fun(_Sp (_Tp::* __f)(_Ap))58 mem_fun(_Sp (_Tp::*__f)(_Ap))
59 {return mem_fun1_t<_Sp,_Tp,_Ap>(__f);}
60
61 template<class _Sp, class _Tp>
62 class _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 mem_fun_ref_t
63 : public unary_function<_Tp, _Sp>
64 {
65 _Sp (_Tp::*__p_)();
66 public:
mem_fun_ref_t(_Sp (_Tp::* __p)())67 _LIBCPP_INLINE_VISIBILITY explicit mem_fun_ref_t(_Sp (_Tp::*__p)())
68 : __p_(__p) {}
operator()69 _LIBCPP_INLINE_VISIBILITY _Sp operator()(_Tp& __p) const
70 {return (__p.*__p_)();}
71 };
72
73 template<class _Sp, class _Tp, class _Ap>
74 class _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 mem_fun1_ref_t
75 : public binary_function<_Tp, _Ap, _Sp>
76 {
77 _Sp (_Tp::*__p_)(_Ap);
78 public:
mem_fun1_ref_t(_Sp (_Tp::* __p)(_Ap))79 _LIBCPP_INLINE_VISIBILITY explicit mem_fun1_ref_t(_Sp (_Tp::*__p)(_Ap))
80 : __p_(__p) {}
operator()81 _LIBCPP_INLINE_VISIBILITY _Sp operator()(_Tp& __p, _Ap __x) const
82 {return (__p.*__p_)(__x);}
83 };
84
85 template<class _Sp, class _Tp>
86 _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
87 mem_fun_ref_t<_Sp,_Tp>
mem_fun_ref(_Sp (_Tp::* __f)())88 mem_fun_ref(_Sp (_Tp::*__f)())
89 {return mem_fun_ref_t<_Sp,_Tp>(__f);}
90
91 template<class _Sp, class _Tp, class _Ap>
92 _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
93 mem_fun1_ref_t<_Sp,_Tp,_Ap>
mem_fun_ref(_Sp (_Tp::* __f)(_Ap))94 mem_fun_ref(_Sp (_Tp::*__f)(_Ap))
95 {return mem_fun1_ref_t<_Sp,_Tp,_Ap>(__f);}
96
97 template <class _Sp, class _Tp>
98 class _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 const_mem_fun_t
99 : public unary_function<const _Tp*, _Sp>
100 {
101 _Sp (_Tp::*__p_)() const;
102 public:
const_mem_fun_t(_Sp (_Tp::* __p)()const)103 _LIBCPP_INLINE_VISIBILITY explicit const_mem_fun_t(_Sp (_Tp::*__p)() const)
104 : __p_(__p) {}
operator()105 _LIBCPP_INLINE_VISIBILITY _Sp operator()(const _Tp* __p) const
106 {return (__p->*__p_)();}
107 };
108
109 template <class _Sp, class _Tp, class _Ap>
110 class _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 const_mem_fun1_t
111 : public binary_function<const _Tp*, _Ap, _Sp>
112 {
113 _Sp (_Tp::*__p_)(_Ap) const;
114 public:
const_mem_fun1_t(_Sp (_Tp::* __p)(_Ap)const)115 _LIBCPP_INLINE_VISIBILITY explicit const_mem_fun1_t(_Sp (_Tp::*__p)(_Ap) const)
116 : __p_(__p) {}
operator()117 _LIBCPP_INLINE_VISIBILITY _Sp operator()(const _Tp* __p, _Ap __x) const
118 {return (__p->*__p_)(__x);}
119 };
120
121 template <class _Sp, class _Tp>
122 _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
123 const_mem_fun_t<_Sp,_Tp>
mem_fun(_Sp (_Tp::* __f)()const)124 mem_fun(_Sp (_Tp::*__f)() const)
125 {return const_mem_fun_t<_Sp,_Tp>(__f);}
126
127 template <class _Sp, class _Tp, class _Ap>
128 _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
129 const_mem_fun1_t<_Sp,_Tp,_Ap>
mem_fun(_Sp (_Tp::* __f)(_Ap)const)130 mem_fun(_Sp (_Tp::*__f)(_Ap) const)
131 {return const_mem_fun1_t<_Sp,_Tp,_Ap>(__f);}
132
133 template <class _Sp, class _Tp>
134 class _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 const_mem_fun_ref_t
135 : public unary_function<_Tp, _Sp>
136 {
137 _Sp (_Tp::*__p_)() const;
138 public:
const_mem_fun_ref_t(_Sp (_Tp::* __p)()const)139 _LIBCPP_INLINE_VISIBILITY explicit const_mem_fun_ref_t(_Sp (_Tp::*__p)() const)
140 : __p_(__p) {}
operator()141 _LIBCPP_INLINE_VISIBILITY _Sp operator()(const _Tp& __p) const
142 {return (__p.*__p_)();}
143 };
144
145 template <class _Sp, class _Tp, class _Ap>
146 class _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 const_mem_fun1_ref_t
147 : public binary_function<_Tp, _Ap, _Sp>
148 {
149 _Sp (_Tp::*__p_)(_Ap) const;
150 public:
const_mem_fun1_ref_t(_Sp (_Tp::* __p)(_Ap)const)151 _LIBCPP_INLINE_VISIBILITY explicit const_mem_fun1_ref_t(_Sp (_Tp::*__p)(_Ap) const)
152 : __p_(__p) {}
operator()153 _LIBCPP_INLINE_VISIBILITY _Sp operator()(const _Tp& __p, _Ap __x) const
154 {return (__p.*__p_)(__x);}
155 };
156
157 template <class _Sp, class _Tp>
158 _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
159 const_mem_fun_ref_t<_Sp,_Tp>
mem_fun_ref(_Sp (_Tp::* __f)()const)160 mem_fun_ref(_Sp (_Tp::*__f)() const)
161 {return const_mem_fun_ref_t<_Sp,_Tp>(__f);}
162
163 template <class _Sp, class _Tp, class _Ap>
164 _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
165 const_mem_fun1_ref_t<_Sp,_Tp,_Ap>
mem_fun_ref(_Sp (_Tp::* __f)(_Ap)const)166 mem_fun_ref(_Sp (_Tp::*__f)(_Ap) const)
167 {return const_mem_fun1_ref_t<_Sp,_Tp,_Ap>(__f);}
168
169 #endif // _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
170
171 _LIBCPP_END_NAMESPACE_STD
172
173 #endif // _LIBCPP___FUNCTIONAL_MEM_FUN_REF_H
174