56 #ifndef _EXT_FUNCTIONAL 
   57 #define _EXT_FUNCTIONAL 1 
   59 #pragma GCC system_header 
   63 namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
 
   65 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
  124   template <
class _Operation1, 
class _Operation2>
 
  127                 typename _Operation1::result_type>
 
  134       unary_compose(
const _Operation1& __x, 
const _Operation2& __y)
 
  135       : _M_fn1(__x), _M_fn2(__y) {}
 
  137       typename _Operation1::result_type
 
  138       operator()(
const typename _Operation2::argument_type& __x)
 const 
  139       { 
return _M_fn1(_M_fn2(__x)); }
 
  143   template <
class _Operation1, 
class _Operation2>
 
  145     compose1(
const _Operation1& __fn1, 
const _Operation2& __fn2)
 
  149   template <
class _Operation1, 
class _Operation2, 
class _Operation3>
 
  152                 typename _Operation1::result_type>
 
  161              const _Operation3& __z)
 
  162       : _M_fn1(__x), _M_fn2(__y), _M_fn3(__z) { }
 
  164       typename _Operation1::result_type
 
  165       operator()(
const typename _Operation2::argument_type& __x)
 const 
  166       { 
return _M_fn1(_M_fn2(__x), _M_fn3(__x)); }
 
  170   template <
class _Operation1, 
class _Operation2, 
class _Operation3>
 
  172     compose2(
const _Operation1& __fn1, 
const _Operation2& __fn2,
 
  173          const _Operation3& __fn3)
 
  175     (__fn1, __fn2, __fn3); }
 
  186     : 
public std::_Identity<_Tp> {};
 
  199   template <
class _Pair>
 
  201     : 
public std::_Select1st<_Pair> {};
 
  204   template <
class _Pair>
 
  206     : 
public std::_Select2nd<_Pair> {};
 
  211   template <
class _Arg1, 
class _Arg2>
 
  215       operator()(
const _Arg1& __x, 
const _Arg2&)
 const 
  219   template <
class _Arg1, 
class _Arg2>
 
  220     struct _Project2nd : 
public binary_function<_Arg1, _Arg2, _Arg2>
 
  223       operator()(
const _Arg1&, 
const _Arg2& __y)
 const 
  236   template <
class _Arg1, 
class _Arg2>
 
  240   template <
class _Arg1, 
class _Arg2>
 
  245   template <
class _Result>
 
  246     struct _Constant_void_fun
 
  248       typedef _Result result_type;
 
  251       _Constant_void_fun(
const result_type& __v) : _M_val(__v) {}
 
  258   template <
class _Result, 
class _Argument>
 
  259     struct _Constant_unary_fun
 
  261       typedef _Argument argument_type;
 
  262       typedef  _Result  result_type;
 
  265       _Constant_unary_fun(
const result_type& __v) : _M_val(__v) {}
 
  268       operator()(
const _Argument&)
 const 
  272   template <
class _Result, 
class _Arg1, 
class _Arg2>
 
  273     struct _Constant_binary_fun
 
  275       typedef  _Arg1   first_argument_type;
 
  276       typedef  _Arg2   second_argument_type;
 
  277       typedef  _Result result_type;
 
  280       _Constant_binary_fun(
const _Result& __v) : _M_val(__v) {}
 
  283       operator()(
const _Arg1&, 
const _Arg2&)
 const 
  302   template <
class _Result>
 
  304     : 
public _Constant_void_fun<_Result>
 
  307       : _Constant_void_fun<_Result>(__v) {}
 
  311   template <
class _Result, 
class _Argument = _Result>
 
  315       : _Constant_unary_fun<_Result, _Argument>(__v) {}
 
  319   template <
class _Result, 
class _Arg1 = _Result, 
class _Arg2 = _Arg1>
 
  321     : 
public _Constant_binary_fun<_Result, _Arg1, _Arg2>
 
  324       : _Constant_binary_fun<_Result, _Arg1, _Arg2>(__v) {}
 
  328   template <
class _Result>
 
  334   template <
class _Result>
 
  335     inline constant_unary_fun<_Result, _Result>
 
  340   template <
class _Result>
 
  341     inline constant_binary_fun<_Result,_Result,_Result>
 
  356     unsigned int _M_table[55];
 
  365       _M_index1 = (_M_index1 + 1) % 55;
 
  366       _M_index2 = (_M_index2 + 1) % 55;
 
  367       _M_table[_M_index1] = _M_table[_M_index1] - _M_table[_M_index2];
 
  368       return _M_table[_M_index1] % __limit;
 
  372     _M_initialize(
unsigned int __seed)
 
  374       unsigned int __k = 1;
 
  375       _M_table[54] = __seed;
 
  377       for (__i = 0; __i < 54; __i++)
 
  379       size_t __ii = (21 * (__i + 1) % 55) - 1;
 
  380       _M_table[__ii] = __k;
 
  382       __seed = _M_table[__ii];
 
  384       for (
int __loop = 0; __loop < 4; __loop++)
 
  386       for (__i = 0; __i < 55; __i++)
 
  387             _M_table[__i] = _M_table[__i] - _M_table[(1 + __i + 30) % 55];
 
  395     { _M_initialize(__seed); }
 
  399     { _M_initialize(161803398u); }
 
  406   template <
class _Ret, 
class _Tp, 
class _Arg>
 
  407     inline mem_fun1_t<_Ret, _Tp, _Arg>
 
  408     mem_fun1(_Ret (_Tp::*__f)(_Arg))
 
  409     { 
return mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
 
  411   template <
class _Ret, 
class _Tp, 
class _Arg>
 
  412     inline const_mem_fun1_t<_Ret, _Tp, _Arg>
 
  413     mem_fun1(_Ret (_Tp::*__f)(_Arg) 
const)
 
  414     { 
return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
 
  416   template <
class _Ret, 
class _Tp, 
class _Arg>
 
  417     inline mem_fun1_ref_t<_Ret, _Tp, _Arg>
 
  418     mem_fun1_ref(_Ret (_Tp::*__f)(_Arg))
 
  419     { 
return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
 
  421   template <
class _Ret, 
class _Tp, 
class _Arg>
 
  422     inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg>
 
  423     mem_fun1_ref(_Ret (_Tp::*__f)(_Arg) 
const)
 
  424     { 
return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
 
  426 _GLIBCXX_END_NAMESPACE_VERSION
 
constant_binary_fun< _Result, _Result, _Result > constant2(const _Result &__val)
An SGI extension . 
 
One of the math functors. 
 
subtractive_rng(unsigned int __seed)
Ctor allowing you to initialize the seed. 
 
One of the adaptors for member pointers. 
 
unary_compose< _Operation1, _Operation2 > compose1(const _Operation1 &__fn1, const _Operation2 &__fn2)
An SGI extension . 
 
binary_compose< _Operation1, _Operation2, _Operation3 > compose2(const _Operation1 &__fn1, const _Operation2 &__fn2, const _Operation3 &__fn3)
An SGI extension . 
 
One of the math functors. 
 
One of the adaptors for member pointers. 
 
constant_void_fun< _Result > constant0(const _Result &__val)
An SGI extension . 
 
unsigned int operator()(unsigned int __limit)
Returns a number less than the argument. 
 
One of the adaptors for member pointers. 
 
subtractive_rng()
Default ctor; initializes its state with some number you don't see. 
 
constant_unary_fun< _Result, _Result > constant1(const _Result &__val)
An SGI extension . 
 
One of the adaptors for member pointers.