56 #ifndef _STL_FUNCTION_H
57 #define _STL_FUNCTION_H 1
59 namespace std _GLIBCXX_VISIBILITY(default)
61 _GLIBCXX_BEGIN_NAMESPACE_VERSION
100 template<
typename _Arg,
typename _Result>
113 template<
typename _Arg1,
typename _Arg2,
typename _Result>
139 template<
typename _Tp>
143 operator()(
const _Tp& __x,
const _Tp& __y)
const
144 {
return __x + __y; }
148 template<
typename _Tp>
152 operator()(
const _Tp& __x,
const _Tp& __y)
const
153 {
return __x - __y; }
157 template<
typename _Tp>
161 operator()(
const _Tp& __x,
const _Tp& __y)
const
162 {
return __x * __y; }
166 template<
typename _Tp>
170 operator()(
const _Tp& __x,
const _Tp& __y)
const
171 {
return __x / __y; }
175 template<
typename _Tp>
179 operator()(
const _Tp& __x,
const _Tp& __y)
const
180 {
return __x % __y; }
184 template<
typename _Tp>
188 operator()(
const _Tp& __x)
const
203 template<
typename _Tp>
207 operator()(
const _Tp& __x,
const _Tp& __y)
const
208 {
return __x == __y; }
212 template<
typename _Tp>
216 operator()(
const _Tp& __x,
const _Tp& __y)
const
217 {
return __x != __y; }
221 template<
typename _Tp>
225 operator()(
const _Tp& __x,
const _Tp& __y)
const
226 {
return __x > __y; }
230 template<
typename _Tp>
234 operator()(
const _Tp& __x,
const _Tp& __y)
const
235 {
return __x < __y; }
239 template<
typename _Tp>
243 operator()(
const _Tp& __x,
const _Tp& __y)
const
244 {
return __x >= __y; }
248 template<
typename _Tp>
252 operator()(
const _Tp& __x,
const _Tp& __y)
const
253 {
return __x <= __y; }
267 template<
typename _Tp>
271 operator()(
const _Tp& __x,
const _Tp& __y)
const
272 {
return __x && __y; }
276 template<
typename _Tp>
280 operator()(
const _Tp& __x,
const _Tp& __y)
const
281 {
return __x || __y; }
285 template<
typename _Tp>
289 operator()(
const _Tp& __x)
const
296 template<
typename _Tp>
300 operator()(
const _Tp& __x,
const _Tp& __y)
const
301 {
return __x & __y; }
304 template<
typename _Tp>
305 struct bit_or :
public binary_function<_Tp, _Tp, _Tp>
308 operator()(
const _Tp& __x,
const _Tp& __y)
const
309 {
return __x | __y; }
312 template<
typename _Tp>
313 struct bit_xor :
public binary_function<_Tp, _Tp, _Tp>
316 operator()(
const _Tp& __x,
const _Tp& __y)
const
317 {
return __x ^ __y; }
350 template<
typename _Predicate>
362 operator()(
const typename _Predicate::argument_type& __x)
const
363 {
return !_M_pred(__x); }
367 template<
typename _Predicate>
373 template<
typename _Predicate>
376 typename _Predicate::second_argument_type, bool>
386 operator()(
const typename _Predicate::first_argument_type& __x,
387 const typename _Predicate::second_argument_type& __y)
const
388 {
return !_M_pred(__x, __y); }
392 template<
typename _Predicate>
421 template<
typename _Arg,
typename _Result>
425 _Result (*_M_ptr)(_Arg);
435 operator()(_Arg __x)
const
436 {
return _M_ptr(__x); }
440 template<
typename _Arg,
typename _Result>
446 template<
typename _Arg1,
typename _Arg2,
typename _Result>
451 _Result (*_M_ptr)(_Arg1, _Arg2);
461 operator()(_Arg1 __x, _Arg2 __y)
const
462 {
return _M_ptr(__x, __y); }
466 template<
typename _Arg1,
typename _Arg2,
typename _Result>
472 template<
typename _Tp>
474 :
public unary_function<_Tp,_Tp>
477 operator()(_Tp& __x)
const
481 operator()(
const _Tp& __x)
const
485 template<
typename _Pair>
487 :
public unary_function<_Pair, typename _Pair::first_type>
489 typename _Pair::first_type&
490 operator()(_Pair& __x)
const
491 {
return __x.first; }
493 const typename _Pair::first_type&
494 operator()(
const _Pair& __x)
const
495 {
return __x.first; }
497 #if __cplusplus >= 201103L
498 template<
typename _Pair2>
499 typename _Pair2::first_type&
500 operator()(_Pair2& __x)
const
501 {
return __x.first; }
503 template<
typename _Pair2>
504 const typename _Pair2::first_type&
505 operator()(
const _Pair2& __x)
const
506 {
return __x.first; }
510 template<
typename _Pair>
512 :
public unary_function<_Pair, typename _Pair::second_type>
514 typename _Pair::second_type&
515 operator()(_Pair& __x)
const
516 {
return __x.second; }
518 const typename _Pair::second_type&
519 operator()(
const _Pair& __x)
const
520 {
return __x.second; }
541 template<
typename _Ret,
typename _Tp>
550 operator()(_Tp* __p)
const
551 {
return (__p->*_M_f)(); }
559 template<
typename _Ret,
typename _Tp>
568 operator()(
const _Tp* __p)
const
569 {
return (__p->*_M_f)(); }
572 _Ret (_Tp::*_M_f)()
const;
577 template<
typename _Ret,
typename _Tp>
586 operator()(_Tp& __r)
const
587 {
return (__r.*_M_f)(); }
595 template<
typename _Ret,
typename _Tp>
604 operator()(
const _Tp& __r)
const
605 {
return (__r.*_M_f)(); }
608 _Ret (_Tp::*_M_f)()
const;
613 template<
typename _Ret,
typename _Tp,
typename _Arg>
622 operator()(_Tp* __p, _Arg __x)
const
623 {
return (__p->*_M_f)(__x); }
626 _Ret (_Tp::*_M_f)(_Arg);
631 template<
typename _Ret,
typename _Tp,
typename _Arg>
640 operator()(
const _Tp* __p, _Arg __x)
const
641 {
return (__p->*_M_f)(__x); }
644 _Ret (_Tp::*_M_f)(_Arg)
const;
649 template<
typename _Ret,
typename _Tp,
typename _Arg>
658 operator()(_Tp& __r, _Arg __x)
const
659 {
return (__r.*_M_f)(__x); }
662 _Ret (_Tp::*_M_f)(_Arg);
667 template<
typename _Ret,
typename _Tp,
typename _Arg>
676 operator()(
const _Tp& __r, _Arg __x)
const
677 {
return (__r.*_M_f)(__x); }
680 _Ret (_Tp::*_M_f)(_Arg)
const;
685 template<
typename _Ret,
typename _Tp>
687 mem_fun(_Ret (_Tp::*__f)())
690 template<
typename _Ret,
typename _Tp>
691 inline const_mem_fun_t<_Ret, _Tp>
692 mem_fun(_Ret (_Tp::*__f)()
const)
693 {
return const_mem_fun_t<_Ret, _Tp>(__f); }
695 template<
typename _Ret,
typename _Tp>
696 inline mem_fun_ref_t<_Ret, _Tp>
697 mem_fun_ref(_Ret (_Tp::*__f)())
698 {
return mem_fun_ref_t<_Ret, _Tp>(__f); }
700 template<
typename _Ret,
typename _Tp>
701 inline const_mem_fun_ref_t<_Ret, _Tp>
702 mem_fun_ref(_Ret (_Tp::*__f)()
const)
703 {
return const_mem_fun_ref_t<_Ret, _Tp>(__f); }
705 template<
typename _Ret,
typename _Tp,
typename _Arg>
706 inline mem_fun1_t<_Ret, _Tp, _Arg>
707 mem_fun(_Ret (_Tp::*__f)(_Arg))
708 {
return mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
710 template<
typename _Ret,
typename _Tp,
typename _Arg>
711 inline const_mem_fun1_t<_Ret, _Tp, _Arg>
712 mem_fun(_Ret (_Tp::*__f)(_Arg)
const)
713 {
return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
715 template<
typename _Ret,
typename _Tp,
typename _Arg>
716 inline mem_fun1_ref_t<_Ret, _Tp, _Arg>
717 mem_fun_ref(_Ret (_Tp::*__f)(_Arg))
718 {
return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
720 template<
typename _Ret,
typename _Tp,
typename _Arg>
721 inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg>
722 mem_fun_ref(_Ret (_Tp::*__f)(_Arg)
const)
723 {
return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
727 _GLIBCXX_END_NAMESPACE_VERSION
730 #if (__cplusplus < 201103L) || _GLIBCXX_USE_DEPRECATED