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>
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
251 _Constant_void_fun(
const result_type& __v) : _M_val(__v) {}
258 template <
class _Result,
class _Argument>
259 struct _Constant_unary_fun
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
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>
340 template <
class _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>
408 mem_fun1(_Ret (_Tp::*__f)(_Arg))
411 template <
class _Ret,
class _Tp,
class _Arg>
413 mem_fun1(_Ret (_Tp::*__f)(_Arg)
const)
416 template <
class _Ret,
class _Tp,
class _Arg>
418 mem_fun1_ref(_Ret (_Tp::*__f)(_Arg))
421 template <
class _Ret,
class _Tp,
class _Arg>
423 mem_fun1_ref(_Ret (_Tp::*__f)(_Arg)
const)
426 _GLIBCXX_END_NAMESPACE_VERSION
constant_unary_fun< _Result, _Result > constant1(const _Result &__val)
An SGI extension .
_Result result_type
result_type is the return type
GNU extensions for public use.
constant_binary_fun< _Result, _Result, _Result > constant2(const _Result &__val)
An SGI extension .
_Arg1 first_argument_type
first_argument_type is the type of the first argument
One of the adaptors for member pointers.
subtractive_rng()
Default ctor; initializes its state with some number you don't see.
_Arg argument_type
argument_type is the type of the argument
constant_void_fun< _Result > constant0(const _Result &__val)
An SGI extension .
unsigned int operator()(unsigned int __limit)
Returns a number less than the argument.
unary_compose< _Operation1, _Operation2 > compose1(const _Operation1 &__fn1, const _Operation2 &__fn2)
An SGI extension .
One of the adaptors for member pointers.
_Arg2 second_argument_type
second_argument_type is the type of the second argument
One of the adaptors for member pointers.
One of the math functors.
One of the adaptors for member pointers.
One of the math functors.
binary_compose< _Operation1, _Operation2, _Operation3 > compose2(const _Operation1 &__fn1, const _Operation2 &__fn2, const _Operation3 &__fn3)
An SGI extension .
subtractive_rng(unsigned int __seed)
Ctor allowing you to initialize the seed.