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
116 template <
class _Operation1,
class _Operation2>
119 typename _Operation1::result_type>
126 unary_compose(
const _Operation1& __x,
const _Operation2& __y)
127 : _M_fn1(__x), _M_fn2(__y) {}
129 typename _Operation1::result_type
130 operator()(
const typename _Operation2::argument_type& __x)
const
131 {
return _M_fn1(_M_fn2(__x)); }
135 template <
class _Operation1,
class _Operation2>
137 compose1(
const _Operation1& __fn1,
const _Operation2& __fn2)
141 template <
class _Operation1,
class _Operation2,
class _Operation3>
144 typename _Operation1::result_type>
153 const _Operation3& __z)
154 : _M_fn1(__x), _M_fn2(__y), _M_fn3(__z) { }
156 typename _Operation1::result_type
157 operator()(
const typename _Operation2::argument_type& __x)
const
158 {
return _M_fn1(_M_fn2(__x), _M_fn3(__x)); }
162 template <
class _Operation1,
class _Operation2,
class _Operation3>
164 compose2(
const _Operation1& __fn1,
const _Operation2& __fn2,
165 const _Operation3& __fn3)
167 (__fn1, __fn2, __fn3); }
178 :
public std::_Identity<_Tp> {};
191 template <
class _Pair>
193 :
public std::_Select1st<_Pair> {};
196 template <
class _Pair>
198 :
public std::_Select2nd<_Pair> {};
203 template <
class _Arg1,
class _Arg2>
207 operator()(
const _Arg1& __x,
const _Arg2&)
const
211 template <
class _Arg1,
class _Arg2>
215 operator()(
const _Arg1&,
const _Arg2& __y)
const
228 template <
class _Arg1,
class _Arg2>
232 template <
class _Arg1,
class _Arg2>
237 template <
class _Result>
238 struct _Constant_void_fun
240 typedef _Result result_type;
243 _Constant_void_fun(
const result_type& __v) : _M_val(__v) {}
250 template <
class _Result,
class _Argument>
251 struct _Constant_unary_fun
253 typedef _Argument argument_type;
254 typedef _Result result_type;
257 _Constant_unary_fun(
const result_type& __v) : _M_val(__v) {}
260 operator()(
const _Argument&)
const
264 template <
class _Result,
class _Arg1,
class _Arg2>
265 struct _Constant_binary_fun
267 typedef _Arg1 first_argument_type;
268 typedef _Arg2 second_argument_type;
269 typedef _Result result_type;
272 _Constant_binary_fun(
const _Result& __v) : _M_val(__v) {}
275 operator()(
const _Arg1&,
const _Arg2&)
const
294 template <
class _Result>
296 :
public _Constant_void_fun<_Result>
299 : _Constant_void_fun<_Result>(__v) {}
303 template <
class _Result,
class _Argument = _Result>
307 : _Constant_unary_fun<_Result, _Argument>(__v) {}
311 template <
class _Result,
class _Arg1 = _Result,
class _Arg2 = _Arg1>
313 :
public _Constant_binary_fun<_Result, _Arg1, _Arg2>
316 : _Constant_binary_fun<_Result, _Arg1, _Arg2>(__v) {}
320 template <
class _Result>
326 template <
class _Result>
327 inline constant_unary_fun<_Result, _Result>
332 template <
class _Result>
333 inline constant_binary_fun<_Result,_Result,_Result>
348 unsigned int _M_table[55];
349 std::size_t _M_index1;
350 std::size_t _M_index2;
357 _M_index1 = (_M_index1 + 1) % 55;
358 _M_index2 = (_M_index2 + 1) % 55;
359 _M_table[_M_index1] = _M_table[_M_index1] - _M_table[_M_index2];
360 return _M_table[_M_index1] % __limit;
364 _M_initialize(
unsigned int __seed)
366 unsigned int __k = 1;
367 _M_table[54] = __seed;
369 for (__i = 0; __i < 54; __i++)
371 std::size_t __ii = (21 * (__i + 1) % 55) - 1;
372 _M_table[__ii] = __k;
374 __seed = _M_table[__ii];
376 for (
int __loop = 0; __loop < 4; __loop++)
378 for (__i = 0; __i < 55; __i++)
379 _M_table[__i] = _M_table[__i] - _M_table[(1 + __i + 30) % 55];
387 { _M_initialize(__seed); }
391 { _M_initialize(161803398u); }
398 template <
class _Ret,
class _Tp,
class _Arg>
400 mem_fun1(_Ret (_Tp::*__f)(_Arg))
403 template <
class _Ret,
class _Tp,
class _Arg>
405 mem_fun1(_Ret (_Tp::*__f)(_Arg)
const)
408 template <
class _Ret,
class _Tp,
class _Arg>
410 mem_fun1_ref(_Ret (_Tp::*__f)(_Arg))
413 template <
class _Ret,
class _Tp,
class _Arg>
415 mem_fun1_ref(_Ret (_Tp::*__f)(_Arg)
const)
418 _GLIBCXX_END_NAMESPACE_VERSION
constant_binary_fun< _Result, _Result, _Result > constant2(const _Result &__val)
An SGI extension .
unsigned int operator()(unsigned int __limit)
Returns a number less than the argument.
subtractive_rng()
Default ctor; initializes its state with some number you don't see.
One of the adaptors for member pointers.
unary_compose< _Operation1, _Operation2 > compose1(const _Operation1 &__fn1, const _Operation2 &__fn2)
An SGI extension .
constant_unary_fun< _Result, _Result > constant1(const _Result &__val)
An SGI extension .
subtractive_rng(unsigned int __seed)
Ctor allowing you to initialize the seed.
constant_void_fun< _Result > constant0(const _Result &__val)
An SGI extension .
One of the math functors.
One of the adaptors for member pointers.
One of the adaptors for member pointers.
One of the math functors.
One of the adaptors for member pointers.
binary_compose< _Operation1, _Operation2, _Operation3 > compose2(const _Operation1 &__fn1, const _Operation2 &__fn2, const _Operation3 &__fn3)
An SGI extension .