diff options
Diffstat (limited to 'tests/libcxx/include/functional')
-rw-r--r-- | tests/libcxx/include/functional | 1946 |
1 files changed, 0 insertions, 1946 deletions
diff --git a/tests/libcxx/include/functional b/tests/libcxx/include/functional deleted file mode 100644 index a5a7dc2a..00000000 --- a/tests/libcxx/include/functional +++ /dev/null @@ -1,1946 +0,0 @@ -// -*- C++ -*- -//===------------------------ functional ----------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_FUNCTIONAL -#define _LIBCPP_FUNCTIONAL - -/* - functional synopsis - -namespace std -{ - -template <class Arg, class Result> -struct unary_function -{ - typedef Arg argument_type; - typedef Result result_type; -}; - -template <class Arg1, class Arg2, class Result> -struct binary_function -{ - typedef Arg1 first_argument_type; - typedef Arg2 second_argument_type; - typedef Result result_type; -}; - -template <class T> -class reference_wrapper - : public unary_function<T1, R> // if wrapping a unary functor - : public binary_function<T1, T2, R> // if wraping a binary functor -{ -public: - // types - typedef T type; - typedef see below result_type; // Not always defined - - // construct/copy/destroy - reference_wrapper(T&); - reference_wrapper(T&&) = delete; // do not bind to temps - reference_wrapper(const reference_wrapper<T>& x); - - // assignment - reference_wrapper& operator=(const reference_wrapper<T>& x); - - // access - operator T& () const; - T& get() const; - - // invoke - template <class... ArgTypes> - typename result_of<T(ArgTypes...)>::type - operator() (ArgTypes&&...) const; -}; - -template <class T> reference_wrapper<T> ref(T& t); -template <class T> void ref(const T&& t) = delete; -template <class T> reference_wrapper<T> ref(reference_wrapper<T>t); - -template <class T> reference_wrapper<const T> cref(const T& t); -template <class T> void cref(const T&& t) = delete; -template <class T> reference_wrapper<const T> cref(reference_wrapper<T> t); - -template <class T> -struct plus : binary_function<T, T, T> -{ - T operator()(const T& x, const T& y) const; -}; - -template <class T> -struct minus : binary_function<T, T, T> -{ - T operator()(const T& x, const T& y) const; -}; - -template <class T> -struct multiplies : binary_function<T, T, T> -{ - T operator()(const T& x, const T& y) const; -}; - -template <class T> -struct divides : binary_function<T, T, T> -{ - T operator()(const T& x, const T& y) const; -}; - -template <class T> -struct modulus : binary_function<T, T, T> -{ - T operator()(const T& x, const T& y) const; -}; - -template <class T> -struct negate : unary_function<T, T> -{ - T operator()(const T& x) const; -}; - -template <class T> -struct equal_to : binary_function<T, T, bool> -{ - bool operator()(const T& x, const T& y) const; -}; - -template <class T> -struct not_equal_to : binary_function<T, T, bool> -{ - bool operator()(const T& x, const T& y) const; -}; - -template <class T> -struct greater : binary_function<T, T, bool> -{ - bool operator()(const T& x, const T& y) const; -}; - -template <class T> -struct less : binary_function<T, T, bool> -{ - bool operator()(const T& x, const T& y) const; -}; - -template <class T> -struct greater_equal : binary_function<T, T, bool> -{ - bool operator()(const T& x, const T& y) const; -}; - -template <class T> -struct less_equal : binary_function<T, T, bool> -{ - bool operator()(const T& x, const T& y) const; -}; - -template <class T> -struct logical_and : binary_function<T, T, bool> -{ - bool operator()(const T& x, const T& y) const; -}; - -template <class T> -struct logical_or : binary_function<T, T, bool> -{ - bool operator()(const T& x, const T& y) const; -}; - -template <class T> -struct logical_not : unary_function<T, bool> -{ - bool operator()(const T& x) const; -}; - -template <class Predicate> -class unary_negate - : public unary_function<typename Predicate::argument_type, bool> -{ -public: - explicit unary_negate(const Predicate& pred); - bool operator()(const typename Predicate::argument_type& x) const; -}; - -template <class Predicate> unary_negate<Predicate> not1(const Predicate& pred); - -template <class Predicate> -class binary_negate - : public binary_function<typename Predicate::first_argument_type, - typename Predicate::second_argument_type, - bool> -{ -public: - explicit binary_negate(const Predicate& pred); - bool operator()(const typename Predicate::first_argument_type& x, - const typename Predicate::second_argument_type& y) const; -}; - -template <class Predicate> binary_negate<Predicate> not2(const Predicate& pred); - -template<class T> struct is_bind_expression; -template<class T> struct is_placeholder; - -template<class Fn, class... BoundArgs> - unspecified bind(Fn&&, BoundArgs&&...); -template<class R, class Fn, class... BoundArgs> - unspecified bind(Fn&&, BoundArgs&&...); - -namespace placeholders { - // M is the implementation-defined number of placeholders - extern unspecified _1; - extern unspecified _2; - . - . - . - extern unspecified _M; -} - -template <class Operation> -class binder1st - : public unary_function<typename Operation::second_argument_type, - typename Operation::result_type> -{ -protected: - Operation op; - typename Operation::first_argument_type value; -public: - binder1st(const Operation& x, const typename Operation::first_argument_type y); - typename Operation::result_type operator()( typename Operation::second_argument_type& x) const; - typename Operation::result_type operator()(const typename Operation::second_argument_type& x) const; -}; - -template <class Operation, class T> -binder1st<Operation> bind1st(const Operation& op, const T& x); - -template <class Operation> -class binder2nd - : public unary_function<typename Operation::first_argument_type, - typename Operation::result_type> -{ -protected: - Operation op; - typename Operation::second_argument_type value; -public: - binder2nd(const Operation& x, const typename Operation::second_argument_type y); - typename Operation::result_type operator()( typename Operation::first_argument_type& x) const; - typename Operation::result_type operator()(const typename Operation::first_argument_type& x) const; -}; - -template <class Operation, class T> -binder2nd<Operation> bind2nd(const Operation& op, const T& x); - -template <class Arg, class Result> -class pointer_to_unary_function : public unary_function<Arg, Result> -{ -public: - explicit pointer_to_unary_function(Result (*f)(Arg)); - Result operator()(Arg x) const; -}; - -template <class Arg, class Result> -pointer_to_unary_function<Arg,Result> ptr_fun(Result (*f)(Arg)); - -template <class Arg1, class Arg2, class Result> -class pointer_to_binary_function : public binary_function<Arg1, Arg2, Result> -{ -public: - explicit pointer_to_binary_function(Result (*f)(Arg1, Arg2)); - Result operator()(Arg1 x, Arg2 y) const; -}; - -template <class Arg1, class Arg2, class Result> -pointer_to_binary_function<Arg1,Arg2,Result> ptr_fun(Result (*f)(Arg1,Arg2)); - -template<class S, class T> -class mem_fun_t : public unary_function<T*, S> -{ -public: - explicit mem_fun_t(S (T::*p)()); - S operator()(T* p) const; -}; - -template<class S, class T, class A> -class mem_fun1_t : public binary_function<T*, A, S> -{ -public: - explicit mem_fun1_t(S (T::*p)(A)); - S operator()(T* p, A x) const; -}; - -template<class S, class T> mem_fun_t<S,T> mem_fun(S (T::*f)()); -template<class S, class T, class A> mem_fun1_t<S,T,A> mem_fun(S (T::*f)(A)); - -template<class S, class T> -class mem_fun_ref_t : public unary_function<T, S> -{ -public: - explicit mem_fun_ref_t(S (T::*p)()); - S operator()(T& p) const; -}; - -template<class S, class T, class A> -class mem_fun1_ref_t : public binary_function<T, A, S> -{ -public: - explicit mem_fun1_ref_t(S (T::*p)(A)); - S operator()(T& p, A x) const; -}; - -template<class S, class T> mem_fun_ref_t<S,T> mem_fun_ref(S (T::*f)()); -template<class S, class T, class A> mem_fun1_ref_t<S,T,A> mem_fun_ref(S (T::*f)(A)); - -template <class S, class T> -class const_mem_fun_t : public unary_function<const T*, S> -{ -public: - explicit const_mem_fun_t(S (T::*p)() const); - S operator()(const T* p) const; -}; - -template <class S, class T, class A> -class const_mem_fun1_t : public binary_function<const T*, A, S> -{ -public: - explicit const_mem_fun1_t(S (T::*p)(A) const); - S operator()(const T* p, A x) const; -}; - -template <class S, class T> const_mem_fun_t<S,T> mem_fun(S (T::*f)() const); -template <class S, class T, class A> const_mem_fun1_t<S,T,A> mem_fun(S (T::*f)(A) const); - -template <class S, class T> -class const_mem_fun_ref_t : public unary_function<T, S> -{ -public: - explicit const_mem_fun_ref_t(S (T::*p)() const); - S operator()(const T& p) const; -}; - -template <class S, class T, class A> -class const_mem_fun1_ref_t : public binary_function<T, A, S> -{ -public: - explicit const_mem_fun1_ref_t(S (T::*p)(A) const); - S operator()(const T& p, A x) const; -}; - -template <class S, class T> const_mem_fun_ref_t<S,T> mem_fun_ref(S (T::*f)() const); -template <class S, class T, class A> const_mem_fun1_ref_t<S,T,A> mem_fun_ref(S (T::*f)(A) const); - -template<class R, class T> unspecified mem_fn(R T::*); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...)); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) const); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) volatile); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) const volatile); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) &); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) const &); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) volatile &); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) const volatile &); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) &&); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) const &&); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) volatile &&); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) const volatile &&); - -class bad_function_call - : public exception -{ -}; - -template<class> class function; // undefined - -template<class R, class... ArgTypes> -class function<R(ArgTypes...)> - : public unary_function<T1, R> // iff sizeof...(ArgTypes) == 1 and - // ArgTypes contains T1 - : public binary_function<T1, T2, R> // iff sizeof...(ArgTypes) == 2 and - // ArgTypes contains T1 and T2 -{ -public: - typedef R result_type; - - // construct/copy/destroy: - function(); - function(nullptr_t); - function(const function&); - function(function&&); - template<class F> - function(F); - template<Allocator Alloc> - function(allocator_arg_t, const Alloc&); - template<Allocator Alloc> - function(allocator_arg_t, const Alloc&, nullptr_t); - template<Allocator Alloc> - function(allocator_arg_t, const Alloc&, const function&); - template<Allocator Alloc> - function(allocator_arg_t, const Alloc&, function&&); - template<class F, Allocator Alloc> - function(allocator_arg_t, const Alloc&, F); - - function& operator=(const function&); - function& operator=(function&&); - function& operator=(nullptr_t); - template<class F> - function& operator=(F&&); - template<class F> - function& operator=(reference_wrapper<F>); - - ~function(); - - // function modifiers: - void swap(function&); - template<class F, class Alloc> - void assign(F&&, const Alloc&); - - // function capacity: - explicit operator bool() const; - - // deleted overloads close possible hole in the type system - template<class R2, class... ArgTypes2> - bool operator==(const function<R2(ArgTypes2...)>&) = delete; - template<class R2, class... ArgTypes2> - bool operator!=(const function<R2(ArgTypes2...)>&) = delete; - - // function invocation: - R operator()(ArgTypes...) const; - - // function target access: - const std::type_info& target_type() const; - template <typename T> T* target(); - template <typename T> const T* target() const; -}; - -// Null pointer comparisons: -template <class R, class ... ArgTypes> - bool operator==(const function<R(ArgTypes...)>&, nullptr_t); - -template <class R, class ... ArgTypes> - bool operator==(nullptr_t, const function<R(ArgTypes...)>&); - -template <class R, class ... ArgTypes> - bool operator!=(const function<R(ArgTypes...)>&, nullptr_t); - -template <class R, class ... ArgTypes> - bool operator!=(nullptr_t, const function<R(ArgTypes...)>&); - -// specialized algorithms: -template <class R, class ... ArgTypes> - void swap(function<R(ArgTypes...)>&, function<R(ArgTypes...)>&); - -template <class T> struct hash; - -template <> struct hash<bool>; -template <> struct hash<char>; -template <> struct hash<signed char>; -template <> struct hash<unsigned char>; -template <> struct hash<char16_t>; -template <> struct hash<char32_t>; -template <> struct hash<wchar_t>; -template <> struct hash<short>; -template <> struct hash<unsigned short>; -template <> struct hash<int>; -template <> struct hash<unsigned int>; -template <> struct hash<long>; -template <> struct hash<long long>; -template <> struct hash<unsigned long>; -template <> struct hash<unsigned long long>; - -template <> struct hash<float>; -template <> struct hash<double>; -template <> struct hash<long double>; - -template<class T> struct hash<T*>; - -} // std - -POLICY: For non-variadic implementations, the number of arguments is limited - to 3. It is hoped that the need for non-variadic implementations - will be minimal. - -*/ - -#include <__config> -#include <type_traits> -#include <typeinfo> -#include <exception> -#include <memory> -#include <tuple> - -#include <__functional_base> - -#pragma GCC system_header - -_LIBCPP_BEGIN_NAMESPACE_STD - -template <class _Tp> -struct _LIBCPP_VISIBLE plus : binary_function<_Tp, _Tp, _Tp> -{ - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const - {return __x + __y;} -}; - -template <class _Tp> -struct _LIBCPP_VISIBLE minus : binary_function<_Tp, _Tp, _Tp> -{ - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const - {return __x - __y;} -}; - -template <class _Tp> -struct _LIBCPP_VISIBLE multiplies : binary_function<_Tp, _Tp, _Tp> -{ - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const - {return __x * __y;} -}; - -template <class _Tp> -struct _LIBCPP_VISIBLE divides : binary_function<_Tp, _Tp, _Tp> -{ - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const - {return __x / __y;} -}; - -template <class _Tp> -struct _LIBCPP_VISIBLE modulus : binary_function<_Tp, _Tp, _Tp> -{ - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const - {return __x % __y;} -}; - -template <class _Tp> -struct _LIBCPP_VISIBLE negate : unary_function<_Tp, _Tp> -{ - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x) const - {return -__x;} -}; - -template <class _Tp> -struct _LIBCPP_VISIBLE equal_to : binary_function<_Tp, _Tp, bool> -{ - _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const - {return __x == __y;} -}; - -template <class _Tp> -struct _LIBCPP_VISIBLE not_equal_to : binary_function<_Tp, _Tp, bool> -{ - _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const - {return __x != __y;} -}; - -template <class _Tp> -struct _LIBCPP_VISIBLE greater : binary_function<_Tp, _Tp, bool> -{ - _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const - {return __x > __y;} -}; - -template <class _Tp> -struct _LIBCPP_VISIBLE less : binary_function<_Tp, _Tp, bool> -{ - _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const - {return __x < __y;} -}; - -template <class _Tp> -struct _LIBCPP_VISIBLE greater_equal : binary_function<_Tp, _Tp, bool> -{ - _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const - {return __x >= __y;} -}; - -template <class _Tp> -struct _LIBCPP_VISIBLE less_equal : binary_function<_Tp, _Tp, bool> -{ - _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const - {return __x <= __y;} -}; - -template <class _Tp> -struct _LIBCPP_VISIBLE logical_and : binary_function<_Tp, _Tp, bool> -{ - _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const - {return __x && __y;} -}; - -template <class _Tp> -struct _LIBCPP_VISIBLE logical_or : binary_function<_Tp, _Tp, bool> -{ - _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const - {return __x || __y;} -}; - -template <class _Tp> -struct _LIBCPP_VISIBLE logical_not : unary_function<_Tp, bool> -{ - _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x) const - {return !__x;} -}; - -template <class _Tp> -struct _LIBCPP_VISIBLE bit_and : binary_function<_Tp, _Tp, _Tp> -{ - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const - {return __x & __y;} -}; - -template <class _Tp> -struct _LIBCPP_VISIBLE bit_or : binary_function<_Tp, _Tp, _Tp> -{ - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const - {return __x | __y;} -}; - -template <class _Tp> -struct _LIBCPP_VISIBLE bit_xor : binary_function<_Tp, _Tp, _Tp> -{ - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const - {return __x ^ __y;} -}; - -template <class _Predicate> -class _LIBCPP_VISIBLE unary_negate - : public unary_function<typename _Predicate::argument_type, bool> -{ - _Predicate __pred_; -public: - _LIBCPP_INLINE_VISIBILITY explicit unary_negate(const _Predicate& __pred) - : __pred_(__pred) {} - _LIBCPP_INLINE_VISIBILITY bool operator()(const typename _Predicate::argument_type& __x) const - {return !__pred_(__x);} -}; - -template <class _Predicate> -inline _LIBCPP_INLINE_VISIBILITY -unary_negate<_Predicate> -not1(const _Predicate& __pred) {return unary_negate<_Predicate>(__pred);} - -template <class _Predicate> -class _LIBCPP_VISIBLE binary_negate - : public binary_function<typename _Predicate::first_argument_type, - typename _Predicate::second_argument_type, - bool> -{ - _Predicate __pred_; -public: - _LIBCPP_INLINE_VISIBILITY explicit binary_negate(const _Predicate& __pred) - : __pred_(__pred) {} - _LIBCPP_INLINE_VISIBILITY bool operator()(const typename _Predicate::first_argument_type& __x, - const typename _Predicate::second_argument_type& __y) const - {return !__pred_(__x, __y);} -}; - -template <class _Predicate> -inline _LIBCPP_INLINE_VISIBILITY -binary_negate<_Predicate> -not2(const _Predicate& __pred) {return binary_negate<_Predicate>(__pred);} - -template <class __Operation> -class _LIBCPP_VISIBLE binder1st - : public unary_function<typename __Operation::second_argument_type, - typename __Operation::result_type> -{ -protected: - __Operation op; - typename __Operation::first_argument_type value; -public: - _LIBCPP_INLINE_VISIBILITY binder1st(const __Operation& __x, - const typename __Operation::first_argument_type __y) - : op(__x), value(__y) {} - _LIBCPP_INLINE_VISIBILITY typename __Operation::result_type operator() - (typename __Operation::second_argument_type& __x) const - {return op(value, __x);} - _LIBCPP_INLINE_VISIBILITY typename __Operation::result_type operator() - (const typename __Operation::second_argument_type& __x) const - {return op(value, __x);} -}; - -template <class __Operation, class _Tp> -inline _LIBCPP_INLINE_VISIBILITY -binder1st<__Operation> -bind1st(const __Operation& __op, const _Tp& __x) - {return binder1st<__Operation>(__op, __x);} - -template <class __Operation> -class _LIBCPP_VISIBLE binder2nd - : public unary_function<typename __Operation::first_argument_type, - typename __Operation::result_type> -{ -protected: - __Operation op; - typename __Operation::second_argument_type value; -public: - _LIBCPP_INLINE_VISIBILITY - binder2nd(const __Operation& __x, const typename __Operation::second_argument_type __y) - : op(__x), value(__y) {} - _LIBCPP_INLINE_VISIBILITY typename __Operation::result_type operator() - ( typename __Operation::first_argument_type& __x) const - {return op(__x, value);} - _LIBCPP_INLINE_VISIBILITY typename __Operation::result_type operator() - (const typename __Operation::first_argument_type& __x) const - {return op(__x, value);} -}; - -template <class __Operation, class _Tp> -inline _LIBCPP_INLINE_VISIBILITY -binder2nd<__Operation> -bind2nd(const __Operation& __op, const _Tp& __x) - {return binder2nd<__Operation>(__op, __x);} - -template <class _Arg, class _Result> -class _LIBCPP_VISIBLE pointer_to_unary_function - : public unary_function<_Arg, _Result> -{ - _Result (*__f_)(_Arg); -public: - _LIBCPP_INLINE_VISIBILITY explicit pointer_to_unary_function(_Result (*__f)(_Arg)) - : __f_(__f) {} - _LIBCPP_INLINE_VISIBILITY _Result operator()(_Arg __x) const - {return __f_(__x);} -}; - -template <class _Arg, class _Result> -inline _LIBCPP_INLINE_VISIBILITY -pointer_to_unary_function<_Arg,_Result> -ptr_fun(_Result (*__f)(_Arg)) - {return pointer_to_unary_function<_Arg,_Result>(__f);} - -template <class _Arg1, class _Arg2, class _Result> -class _LIBCPP_VISIBLE pointer_to_binary_function - : public binary_function<_Arg1, _Arg2, _Result> -{ - _Result (*__f_)(_Arg1, _Arg2); -public: - _LIBCPP_INLINE_VISIBILITY explicit pointer_to_binary_function(_Result (*__f)(_Arg1, _Arg2)) - : __f_(__f) {} - _LIBCPP_INLINE_VISIBILITY _Result operator()(_Arg1 __x, _Arg2 __y) const - {return __f_(__x, __y);} -}; - -template <class _Arg1, class _Arg2, class _Result> -inline _LIBCPP_INLINE_VISIBILITY -pointer_to_binary_function<_Arg1,_Arg2,_Result> -ptr_fun(_Result (*__f)(_Arg1,_Arg2)) - {return pointer_to_binary_function<_Arg1,_Arg2,_Result>(__f);} - -template<class _Sp, class _Tp> -class _LIBCPP_VISIBLE mem_fun_t : public unary_function<_Tp*, _Sp> -{ - _Sp (_Tp::*__p_)(); -public: - _LIBCPP_INLINE_VISIBILITY explicit mem_fun_t(_Sp (_Tp::*__p)()) - : __p_(__p) {} - _LIBCPP_INLINE_VISIBILITY _Sp operator()(_Tp* __p) const - {return (__p->*__p_)();} -}; - -template<class _Sp, class _Tp, class _Ap> -class _LIBCPP_VISIBLE mem_fun1_t : public binary_function<_Tp*, _Ap, _Sp> -{ - _Sp (_Tp::*__p_)(_Ap); -public: - _LIBCPP_INLINE_VISIBILITY explicit mem_fun1_t(_Sp (_Tp::*__p)(_Ap)) - : __p_(__p) {} - _LIBCPP_INLINE_VISIBILITY _Sp operator()(_Tp* __p, _Ap __x) const - {return (__p->*__p_)(__x);} -}; - -template<class _Sp, class _Tp> -inline _LIBCPP_INLINE_VISIBILITY -mem_fun_t<_Sp,_Tp> -mem_fun(_Sp (_Tp::*__f)()) - {return mem_fun_t<_Sp,_Tp>(__f);} - -template<class _Sp, class _Tp, class _Ap> -inline _LIBCPP_INLINE_VISIBILITY -mem_fun1_t<_Sp,_Tp,_Ap> -mem_fun(_Sp (_Tp::*__f)(_Ap)) - {return mem_fun1_t<_Sp,_Tp,_Ap>(__f);} - -template<class _Sp, class _Tp> -class _LIBCPP_VISIBLE mem_fun_ref_t : public unary_function<_Tp, _Sp> -{ - _Sp (_Tp::*__p_)(); -public: - _LIBCPP_INLINE_VISIBILITY explicit mem_fun_ref_t(_Sp (_Tp::*__p)()) - : __p_(__p) {} - _LIBCPP_INLINE_VISIBILITY _Sp operator()(_Tp& __p) const - {return (__p.*__p_)();} -}; - -template<class _Sp, class _Tp, class _Ap> -class _LIBCPP_VISIBLE mem_fun1_ref_t : public binary_function<_Tp, _Ap, _Sp> -{ - _Sp (_Tp::*__p_)(_Ap); -public: - _LIBCPP_INLINE_VISIBILITY explicit mem_fun1_ref_t(_Sp (_Tp::*__p)(_Ap)) - : __p_(__p) {} - _LIBCPP_INLINE_VISIBILITY _Sp operator()(_Tp& __p, _Ap __x) const - {return (__p.*__p_)(__x);} -}; - -template<class _Sp, class _Tp> -inline _LIBCPP_INLINE_VISIBILITY -mem_fun_ref_t<_Sp,_Tp> -mem_fun_ref(_Sp (_Tp::*__f)()) - {return mem_fun_ref_t<_Sp,_Tp>(__f);} - -template<class _Sp, class _Tp, class _Ap> -inline _LIBCPP_INLINE_VISIBILITY -mem_fun1_ref_t<_Sp,_Tp,_Ap> -mem_fun_ref(_Sp (_Tp::*__f)(_Ap)) - {return mem_fun1_ref_t<_Sp,_Tp,_Ap>(__f);} - -template <class _Sp, class _Tp> -class _LIBCPP_VISIBLE const_mem_fun_t : public unary_function<const _Tp*, _Sp> -{ - _Sp (_Tp::*__p_)() const; -public: - _LIBCPP_INLINE_VISIBILITY explicit const_mem_fun_t(_Sp (_Tp::*__p)() const) - : __p_(__p) {} - _LIBCPP_INLINE_VISIBILITY _Sp operator()(const _Tp* __p) const - {return (__p->*__p_)();} -}; - -template <class _Sp, class _Tp, class _Ap> -class _LIBCPP_VISIBLE const_mem_fun1_t : public binary_function<const _Tp*, _Ap, _Sp> -{ - _Sp (_Tp::*__p_)(_Ap) const; -public: - _LIBCPP_INLINE_VISIBILITY explicit const_mem_fun1_t(_Sp (_Tp::*__p)(_Ap) const) - : __p_(__p) {} - _LIBCPP_INLINE_VISIBILITY _Sp operator()(const _Tp* __p, _Ap __x) const - {return (__p->*__p_)(__x);} -}; - -template <class _Sp, class _Tp> -inline _LIBCPP_INLINE_VISIBILITY -const_mem_fun_t<_Sp,_Tp> -mem_fun(_Sp (_Tp::*__f)() const) - {return const_mem_fun_t<_Sp,_Tp>(__f);} - -template <class _Sp, class _Tp, class _Ap> -inline _LIBCPP_INLINE_VISIBILITY -const_mem_fun1_t<_Sp,_Tp,_Ap> -mem_fun(_Sp (_Tp::*__f)(_Ap) const) - {return const_mem_fun1_t<_Sp,_Tp,_Ap>(__f);} - -template <class _Sp, class _Tp> -class _LIBCPP_VISIBLE const_mem_fun_ref_t : public unary_function<_Tp, _Sp> -{ - _Sp (_Tp::*__p_)() const; -public: - _LIBCPP_INLINE_VISIBILITY explicit const_mem_fun_ref_t(_Sp (_Tp::*__p)() const) - : __p_(__p) {} - _LIBCPP_INLINE_VISIBILITY _Sp operator()(const _Tp& __p) const - {return (__p.*__p_)();} -}; - -template <class _Sp, class _Tp, class _Ap> -class _LIBCPP_VISIBLE const_mem_fun1_ref_t - : public binary_function<_Tp, _Ap, _Sp> -{ - _Sp (_Tp::*__p_)(_Ap) const; -public: - _LIBCPP_INLINE_VISIBILITY explicit const_mem_fun1_ref_t(_Sp (_Tp::*__p)(_Ap) const) - : __p_(__p) {} - _LIBCPP_INLINE_VISIBILITY _Sp operator()(const _Tp& __p, _Ap __x) const - {return (__p.*__p_)(__x);} -}; - -template <class _Sp, class _Tp> -inline _LIBCPP_INLINE_VISIBILITY -const_mem_fun_ref_t<_Sp,_Tp> -mem_fun_ref(_Sp (_Tp::*__f)() const) - {return const_mem_fun_ref_t<_Sp,_Tp>(__f);} - -template <class _Sp, class _Tp, class _Ap> -inline _LIBCPP_INLINE_VISIBILITY -const_mem_fun1_ref_t<_Sp,_Tp,_Ap> -mem_fun_ref(_Sp (_Tp::*__f)(_Ap) const) - {return const_mem_fun1_ref_t<_Sp,_Tp,_Ap>(__f);} - -#ifdef _LIBCPP_HAS_NO_VARIADICS - -#include <__functional_03> - -#else // _LIBCPP_HAS_NO_VARIADICS - -template <class _Tp> -class __mem_fn - : public __weak_result_type<_Tp> -{ -public: - // types - typedef _Tp type; -private: - type __f_; - -public: - _LIBCPP_INLINE_VISIBILITY __mem_fn(type __f) : __f_(__f) {} - - // invoke - template <class... _ArgTypes> - _LIBCPP_INLINE_VISIBILITY - typename __invoke_return<type, _ArgTypes...>::type - operator() (_ArgTypes&&... __args) - { - return __invoke(__f_, _STD::forward<_ArgTypes>(__args)...); - } -}; - -template<class _R, class _T> -inline _LIBCPP_INLINE_VISIBILITY -__mem_fn<_R _T::*> -mem_fn(_R _T::* __pm) -{ - return __mem_fn<_R _T::*>(__pm); -} - -template<class _R, class _T, class ..._Args> -inline _LIBCPP_INLINE_VISIBILITY -__mem_fn<_R (_T::*)(_Args...)> -mem_fn(_R (_T::* __pm)(_Args...)) -{ - return __mem_fn<_R (_T::*)(_Args...)>(__pm); -} - -template<class _R, class _T, class ..._Args> -inline _LIBCPP_INLINE_VISIBILITY -__mem_fn<_R (_T::*)(_Args...) const> -mem_fn(_R (_T::* __pm)(_Args...) const) -{ - return __mem_fn<_R (_T::*)(_Args...) const>(__pm); -} - -template<class _R, class _T, class ..._Args> -inline _LIBCPP_INLINE_VISIBILITY -__mem_fn<_R (_T::*)(_Args...) volatile> -mem_fn(_R (_T::* __pm)(_Args...) volatile) -{ - return __mem_fn<_R (_T::*)(_Args...) volatile>(__pm); -} - -template<class _R, class _T, class ..._Args> -inline _LIBCPP_INLINE_VISIBILITY -__mem_fn<_R (_T::*)(_Args...) const volatile> -mem_fn(_R (_T::* __pm)(_Args...) const volatile) -{ - return __mem_fn<_R (_T::*)(_Args...) const volatile>(__pm); -} - -// bad_function_call - -class _LIBCPP_EXCEPTION_ABI bad_function_call - : public exception -{ -}; - -template<class _Fp> class _LIBCPP_VISIBLE function; // undefined - -namespace __function -{ - -template<class _R, class ..._ArgTypes> -struct __maybe_derive_from_unary_function -{ -}; - -template<class _R, class _A1> -struct __maybe_derive_from_unary_function<_R(_A1)> - : public unary_function<_A1, _R> -{ -}; - -template<class _R, class ..._ArgTypes> -struct __maybe_derive_from_binary_function -{ -}; - -template<class _R, class _A1, class _A2> -struct __maybe_derive_from_binary_function<_R(_A1, _A2)> - : public binary_function<_A1, _A2, _R> -{ -}; - -template<class _Fp> class __base; - -template<class _R, class ..._ArgTypes> -class __base<_R(_ArgTypes...)> -{ - __base(const __base&); - __base& operator=(const __base&); -public: - _LIBCPP_INLINE_VISIBILITY __base() {} - _LIBCPP_INLINE_VISIBILITY virtual ~__base() {} - virtual __base* __clone() const = 0; - virtual void __clone(__base*) const = 0; - virtual void destroy() = 0; - virtual void destroy_deallocate() = 0; - virtual _R operator()(_ArgTypes&& ...) = 0; -#ifndef _LIBCPP_NO_RTTI - virtual const void* target(const type_info&) const = 0; - virtual const std::type_info& target_type() const = 0; -#endif // _LIBCPP_NO_RTTI -}; - -template<class _FD, class _Alloc, class _FB> class __func; - -template<class _F, class _Alloc, class _R, class ..._ArgTypes> -class __func<_F, _Alloc, _R(_ArgTypes...)> - : public __base<_R(_ArgTypes...)> -{ - __compressed_pair<_F, _Alloc> __f_; -public: - _LIBCPP_INLINE_VISIBILITY - explicit __func(_F __f) : __f_(_STD::move(__f)) {} - _LIBCPP_INLINE_VISIBILITY - explicit __func(_F __f, _Alloc __a) : __f_(_STD::move(__f), _STD::move(__a)) {} - virtual __base<_R(_ArgTypes...)>* __clone() const; - virtual void __clone(__base<_R(_ArgTypes...)>*) const; - virtual void destroy(); - virtual void destroy_deallocate(); - virtual _R operator()(_ArgTypes&& ... __arg); -#ifndef _LIBCPP_NO_RTTI - virtual const void* target(const type_info&) const; - virtual const std::type_info& target_type() const; -#endif // _LIBCPP_NO_RTTI -}; - -template<class _F, class _Alloc, class _R, class ..._ArgTypes> -__base<_R(_ArgTypes...)>* -__func<_F, _Alloc, _R(_ArgTypes...)>::__clone() const -{ - typedef typename _Alloc::template rebind<__func>::other _A; - _A __a(__f_.second()); - typedef __allocator_destructor<_A> _D; - unique_ptr<__func, _D> __hold(__a.allocate(1), _D(__a, 1)); - ::new (__hold.get()) __func(__f_.first(), _Alloc(__a)); - return __hold.release(); -} - -template<class _F, class _Alloc, class _R, class ..._ArgTypes> -void -__func<_F, _Alloc, _R(_ArgTypes...)>::__clone(__base<_R(_ArgTypes...)>* __p) const -{ - ::new (__p) __func(__f_.first(), __f_.second()); -} - -template<class _F, class _Alloc, class _R, class ..._ArgTypes> -void -__func<_F, _Alloc, _R(_ArgTypes...)>::destroy() -{ - __f_.~__compressed_pair<_F, _Alloc>(); -} - -template<class _F, class _Alloc, class _R, class ..._ArgTypes> -void -__func<_F, _Alloc, _R(_ArgTypes...)>::destroy_deallocate() -{ - typedef typename _Alloc::template rebind<__func>::other _A; - _A __a(__f_.second()); - __f_.~__compressed_pair<_F, _Alloc>(); - __a.deallocate(this, 1); -} - -template<class _F, class _Alloc, class _R, class ..._ArgTypes> -_R -__func<_F, _Alloc, _R(_ArgTypes...)>::operator()(_ArgTypes&& ... __arg) -{ - return __invoke(__f_.first(), _STD::forward<_ArgTypes>(__arg)...); -} - -#ifndef _LIBCPP_NO_RTTI - -template<class _F, class _Alloc, class _R, class ..._ArgTypes> -const void* -__func<_F, _Alloc, _R(_ArgTypes...)>::target(const type_info& __ti) const -{ - if (__ti == typeid(_F)) - return &__f_.first(); - return (const void*)0; -} - -template<class _F, class _Alloc, class _R, class ..._ArgTypes> -const std::type_info& -__func<_F, _Alloc, _R(_ArgTypes...)>::target_type() const -{ - return typeid(_F); -} - -#endif // _LIBCPP_NO_RTTI |