176d0caaeSpatrick // -*- C++ -*-
276d0caaeSpatrick //===----------------------------------------------------------------------===//
376d0caaeSpatrick //
476d0caaeSpatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
576d0caaeSpatrick // See https://llvm.org/LICENSE.txt for license information.
676d0caaeSpatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
776d0caaeSpatrick //
876d0caaeSpatrick //===----------------------------------------------------------------------===//
976d0caaeSpatrick
1076d0caaeSpatrick #ifndef _LIBCPP___FUNCTIONAL_MEM_FUN_REF_H
1176d0caaeSpatrick #define _LIBCPP___FUNCTIONAL_MEM_FUN_REF_H
1276d0caaeSpatrick
1376d0caaeSpatrick #include <__config>
1476d0caaeSpatrick #include <__functional/binary_function.h>
15*4bdff4beSrobert #include <__functional/unary_function.h>
1676d0caaeSpatrick
1776d0caaeSpatrick #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
1876d0caaeSpatrick # pragma GCC system_header
1976d0caaeSpatrick #endif
2076d0caaeSpatrick
2176d0caaeSpatrick _LIBCPP_BEGIN_NAMESPACE_STD
2276d0caaeSpatrick
2376d0caaeSpatrick #if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
2476d0caaeSpatrick
2576d0caaeSpatrick template<class _Sp, class _Tp>
2676d0caaeSpatrick class _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 mem_fun_t
27*4bdff4beSrobert : public __unary_function<_Tp*, _Sp>
2876d0caaeSpatrick {
2976d0caaeSpatrick _Sp (_Tp::*__p_)();
3076d0caaeSpatrick public:
mem_fun_t(_Sp (_Tp::* __p)())3176d0caaeSpatrick _LIBCPP_INLINE_VISIBILITY explicit mem_fun_t(_Sp (_Tp::*__p)())
3276d0caaeSpatrick : __p_(__p) {}
operator()3376d0caaeSpatrick _LIBCPP_INLINE_VISIBILITY _Sp operator()(_Tp* __p) const
3476d0caaeSpatrick {return (__p->*__p_)();}
3576d0caaeSpatrick };
3676d0caaeSpatrick
3776d0caaeSpatrick template<class _Sp, class _Tp, class _Ap>
3876d0caaeSpatrick class _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 mem_fun1_t
39*4bdff4beSrobert : public __binary_function<_Tp*, _Ap, _Sp>
4076d0caaeSpatrick {
4176d0caaeSpatrick _Sp (_Tp::*__p_)(_Ap);
4276d0caaeSpatrick public:
mem_fun1_t(_Sp (_Tp::* __p)(_Ap))4376d0caaeSpatrick _LIBCPP_INLINE_VISIBILITY explicit mem_fun1_t(_Sp (_Tp::*__p)(_Ap))
4476d0caaeSpatrick : __p_(__p) {}
operator()4576d0caaeSpatrick _LIBCPP_INLINE_VISIBILITY _Sp operator()(_Tp* __p, _Ap __x) const
4676d0caaeSpatrick {return (__p->*__p_)(__x);}
4776d0caaeSpatrick };
4876d0caaeSpatrick
4976d0caaeSpatrick template<class _Sp, class _Tp>
5076d0caaeSpatrick _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
5176d0caaeSpatrick mem_fun_t<_Sp,_Tp>
mem_fun(_Sp (_Tp::* __f)())5276d0caaeSpatrick mem_fun(_Sp (_Tp::*__f)())
5376d0caaeSpatrick {return mem_fun_t<_Sp,_Tp>(__f);}
5476d0caaeSpatrick
5576d0caaeSpatrick template<class _Sp, class _Tp, class _Ap>
5676d0caaeSpatrick _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
5776d0caaeSpatrick mem_fun1_t<_Sp,_Tp,_Ap>
mem_fun(_Sp (_Tp::* __f)(_Ap))5876d0caaeSpatrick mem_fun(_Sp (_Tp::*__f)(_Ap))
5976d0caaeSpatrick {return mem_fun1_t<_Sp,_Tp,_Ap>(__f);}
6076d0caaeSpatrick
6176d0caaeSpatrick template<class _Sp, class _Tp>
6276d0caaeSpatrick class _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 mem_fun_ref_t
63*4bdff4beSrobert : public __unary_function<_Tp, _Sp>
6476d0caaeSpatrick {
6576d0caaeSpatrick _Sp (_Tp::*__p_)();
6676d0caaeSpatrick public:
mem_fun_ref_t(_Sp (_Tp::* __p)())6776d0caaeSpatrick _LIBCPP_INLINE_VISIBILITY explicit mem_fun_ref_t(_Sp (_Tp::*__p)())
6876d0caaeSpatrick : __p_(__p) {}
operator()6976d0caaeSpatrick _LIBCPP_INLINE_VISIBILITY _Sp operator()(_Tp& __p) const
7076d0caaeSpatrick {return (__p.*__p_)();}
7176d0caaeSpatrick };
7276d0caaeSpatrick
7376d0caaeSpatrick template<class _Sp, class _Tp, class _Ap>
7476d0caaeSpatrick class _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 mem_fun1_ref_t
75*4bdff4beSrobert : public __binary_function<_Tp, _Ap, _Sp>
7676d0caaeSpatrick {
7776d0caaeSpatrick _Sp (_Tp::*__p_)(_Ap);
7876d0caaeSpatrick public:
mem_fun1_ref_t(_Sp (_Tp::* __p)(_Ap))7976d0caaeSpatrick _LIBCPP_INLINE_VISIBILITY explicit mem_fun1_ref_t(_Sp (_Tp::*__p)(_Ap))
8076d0caaeSpatrick : __p_(__p) {}
operator()8176d0caaeSpatrick _LIBCPP_INLINE_VISIBILITY _Sp operator()(_Tp& __p, _Ap __x) const
8276d0caaeSpatrick {return (__p.*__p_)(__x);}
8376d0caaeSpatrick };
8476d0caaeSpatrick
8576d0caaeSpatrick template<class _Sp, class _Tp>
8676d0caaeSpatrick _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
8776d0caaeSpatrick mem_fun_ref_t<_Sp,_Tp>
mem_fun_ref(_Sp (_Tp::* __f)())8876d0caaeSpatrick mem_fun_ref(_Sp (_Tp::*__f)())
8976d0caaeSpatrick {return mem_fun_ref_t<_Sp,_Tp>(__f);}
9076d0caaeSpatrick
9176d0caaeSpatrick template<class _Sp, class _Tp, class _Ap>
9276d0caaeSpatrick _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
9376d0caaeSpatrick mem_fun1_ref_t<_Sp,_Tp,_Ap>
mem_fun_ref(_Sp (_Tp::* __f)(_Ap))9476d0caaeSpatrick mem_fun_ref(_Sp (_Tp::*__f)(_Ap))
9576d0caaeSpatrick {return mem_fun1_ref_t<_Sp,_Tp,_Ap>(__f);}
9676d0caaeSpatrick
9776d0caaeSpatrick template <class _Sp, class _Tp>
9876d0caaeSpatrick class _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 const_mem_fun_t
99*4bdff4beSrobert : public __unary_function<const _Tp*, _Sp>
10076d0caaeSpatrick {
10176d0caaeSpatrick _Sp (_Tp::*__p_)() const;
10276d0caaeSpatrick public:
const_mem_fun_t(_Sp (_Tp::* __p)()const)10376d0caaeSpatrick _LIBCPP_INLINE_VISIBILITY explicit const_mem_fun_t(_Sp (_Tp::*__p)() const)
10476d0caaeSpatrick : __p_(__p) {}
operator()10576d0caaeSpatrick _LIBCPP_INLINE_VISIBILITY _Sp operator()(const _Tp* __p) const
10676d0caaeSpatrick {return (__p->*__p_)();}
10776d0caaeSpatrick };
10876d0caaeSpatrick
10976d0caaeSpatrick template <class _Sp, class _Tp, class _Ap>
11076d0caaeSpatrick class _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 const_mem_fun1_t
111*4bdff4beSrobert : public __binary_function<const _Tp*, _Ap, _Sp>
11276d0caaeSpatrick {
11376d0caaeSpatrick _Sp (_Tp::*__p_)(_Ap) const;
11476d0caaeSpatrick public:
const_mem_fun1_t(_Sp (_Tp::* __p)(_Ap)const)11576d0caaeSpatrick _LIBCPP_INLINE_VISIBILITY explicit const_mem_fun1_t(_Sp (_Tp::*__p)(_Ap) const)
11676d0caaeSpatrick : __p_(__p) {}
operator()11776d0caaeSpatrick _LIBCPP_INLINE_VISIBILITY _Sp operator()(const _Tp* __p, _Ap __x) const
11876d0caaeSpatrick {return (__p->*__p_)(__x);}
11976d0caaeSpatrick };
12076d0caaeSpatrick
12176d0caaeSpatrick template <class _Sp, class _Tp>
12276d0caaeSpatrick _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
12376d0caaeSpatrick const_mem_fun_t<_Sp,_Tp>
mem_fun(_Sp (_Tp::* __f)()const)12476d0caaeSpatrick mem_fun(_Sp (_Tp::*__f)() const)
12576d0caaeSpatrick {return const_mem_fun_t<_Sp,_Tp>(__f);}
12676d0caaeSpatrick
12776d0caaeSpatrick template <class _Sp, class _Tp, class _Ap>
12876d0caaeSpatrick _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
12976d0caaeSpatrick const_mem_fun1_t<_Sp,_Tp,_Ap>
mem_fun(_Sp (_Tp::* __f)(_Ap)const)13076d0caaeSpatrick mem_fun(_Sp (_Tp::*__f)(_Ap) const)
13176d0caaeSpatrick {return const_mem_fun1_t<_Sp,_Tp,_Ap>(__f);}
13276d0caaeSpatrick
13376d0caaeSpatrick template <class _Sp, class _Tp>
13476d0caaeSpatrick class _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 const_mem_fun_ref_t
135*4bdff4beSrobert : public __unary_function<_Tp, _Sp>
13676d0caaeSpatrick {
13776d0caaeSpatrick _Sp (_Tp::*__p_)() const;
13876d0caaeSpatrick public:
const_mem_fun_ref_t(_Sp (_Tp::* __p)()const)13976d0caaeSpatrick _LIBCPP_INLINE_VISIBILITY explicit const_mem_fun_ref_t(_Sp (_Tp::*__p)() const)
14076d0caaeSpatrick : __p_(__p) {}
operator()14176d0caaeSpatrick _LIBCPP_INLINE_VISIBILITY _Sp operator()(const _Tp& __p) const
14276d0caaeSpatrick {return (__p.*__p_)();}
14376d0caaeSpatrick };
14476d0caaeSpatrick
14576d0caaeSpatrick template <class _Sp, class _Tp, class _Ap>
14676d0caaeSpatrick class _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 const_mem_fun1_ref_t
147*4bdff4beSrobert : public __binary_function<_Tp, _Ap, _Sp>
14876d0caaeSpatrick {
14976d0caaeSpatrick _Sp (_Tp::*__p_)(_Ap) const;
15076d0caaeSpatrick public:
const_mem_fun1_ref_t(_Sp (_Tp::* __p)(_Ap)const)15176d0caaeSpatrick _LIBCPP_INLINE_VISIBILITY explicit const_mem_fun1_ref_t(_Sp (_Tp::*__p)(_Ap) const)
15276d0caaeSpatrick : __p_(__p) {}
operator()15376d0caaeSpatrick _LIBCPP_INLINE_VISIBILITY _Sp operator()(const _Tp& __p, _Ap __x) const
15476d0caaeSpatrick {return (__p.*__p_)(__x);}
15576d0caaeSpatrick };
15676d0caaeSpatrick
15776d0caaeSpatrick template <class _Sp, class _Tp>
15876d0caaeSpatrick _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
15976d0caaeSpatrick const_mem_fun_ref_t<_Sp,_Tp>
mem_fun_ref(_Sp (_Tp::* __f)()const)16076d0caaeSpatrick mem_fun_ref(_Sp (_Tp::*__f)() const)
16176d0caaeSpatrick {return const_mem_fun_ref_t<_Sp,_Tp>(__f);}
16276d0caaeSpatrick
16376d0caaeSpatrick template <class _Sp, class _Tp, class _Ap>
16476d0caaeSpatrick _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
16576d0caaeSpatrick const_mem_fun1_ref_t<_Sp,_Tp,_Ap>
mem_fun_ref(_Sp (_Tp::* __f)(_Ap)const)16676d0caaeSpatrick mem_fun_ref(_Sp (_Tp::*__f)(_Ap) const)
16776d0caaeSpatrick {return const_mem_fun1_ref_t<_Sp,_Tp,_Ap>(__f);}
16876d0caaeSpatrick
16976d0caaeSpatrick #endif // _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
17076d0caaeSpatrick
17176d0caaeSpatrick _LIBCPP_END_NAMESPACE_STD
17276d0caaeSpatrick
17376d0caaeSpatrick #endif // _LIBCPP___FUNCTIONAL_MEM_FUN_REF_H
174