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
One of the math functors.
One of the math functors.
subtractive_rng(unsigned int __seed)
Ctor allowing you to initialize the seed.
constant_binary_fun< _Result, _Result, _Result > constant2(const _Result &__val)
An SGI extension .
subtractive_rng()
Default ctor; initializes its state with some number you don't see.
One of the adaptors for member pointers.
One of the adaptors for member pointers.
One of the adaptors for member pointers.
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 .
binary_compose< _Operation1, _Operation2, _Operation3 > compose2(const _Operation1 &__fn1, const _Operation2 &__fn2, const _Operation3 &__fn3)
An SGI extension .
constant_unary_fun< _Result, _Result > constant1(const _Result &__val)
An SGI extension .
constant_void_fun< _Result > constant0(const _Result &__val)
An SGI extension .
One of the adaptors for member pointers.