57 #ifndef _EXT_FUNCTIONAL
58 #define _EXT_FUNCTIONAL 1
60 #pragma GCC system_header
64 namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
66 _GLIBCXX_BEGIN_NAMESPACE_VERSION
125 template <
class _Operation1,
class _Operation2>
128 typename _Operation1::result_type>
135 unary_compose(
const _Operation1& __x,
const _Operation2& __y)
136 : _M_fn1(__x), _M_fn2(__y) {}
138 typename _Operation1::result_type
139 operator()(
const typename _Operation2::argument_type& __x)
const
140 {
return _M_fn1(_M_fn2(__x)); }
144 template <
class _Operation1,
class _Operation2>
146 compose1(
const _Operation1& __fn1,
const _Operation2& __fn2)
150 template <
class _Operation1,
class _Operation2,
class _Operation3>
153 typename _Operation1::result_type>
162 const _Operation3& __z)
163 : _M_fn1(__x), _M_fn2(__y), _M_fn3(__z) { }
165 typename _Operation1::result_type
166 operator()(
const typename _Operation2::argument_type& __x)
const
167 {
return _M_fn1(_M_fn2(__x), _M_fn3(__x)); }
171 template <
class _Operation1,
class _Operation2,
class _Operation3>
173 compose2(
const _Operation1& __fn1,
const _Operation2& __fn2,
174 const _Operation3& __fn3)
176 (__fn1, __fn2, __fn3); }
187 #ifdef __GXX_EXPERIMENTAL_CXX0X__
189 public std::_Identity<_Tp> {};
191 :
public std::_Identity<_Tp> {};
205 template <
class _Pair>
207 #ifdef __GXX_EXPERIMENTAL_CXX0X__
209 public std::_Select1st<_Pair> {};
211 :
public std::_Select1st<_Pair> {};
215 template <
class _Pair>
217 #ifdef __GXX_EXPERIMENTAL_CXX0X__
219 public std::_Select2nd<_Pair> {};
221 :
public std::_Select2nd<_Pair> {};
226 template <
class _Arg1,
class _Arg2>
227 struct _Project1st :
public binary_function<_Arg1, _Arg2, _Arg1>
230 operator()(
const _Arg1& __x,
const _Arg2&)
const
234 template <
class _Arg1,
class _Arg2>
235 struct _Project2nd :
public binary_function<_Arg1, _Arg2, _Arg2>
238 operator()(
const _Arg1&,
const _Arg2& __y)
const
251 template <
class _Arg1,
class _Arg2>
255 template <
class _Arg1,
class _Arg2>
260 template <
class _Result>
261 struct _Constant_void_fun
263 typedef _Result result_type;
266 _Constant_void_fun(
const result_type& __v) : _M_val(__v) {}
273 template <
class _Result,
class _Argument>
274 struct _Constant_unary_fun
276 typedef _Argument argument_type;
277 typedef _Result result_type;
280 _Constant_unary_fun(
const result_type& __v) : _M_val(__v) {}
283 operator()(
const _Argument&)
const
287 template <
class _Result,
class _Arg1,
class _Arg2>
288 struct _Constant_binary_fun
290 typedef _Arg1 first_argument_type;
291 typedef _Arg2 second_argument_type;
292 typedef _Result result_type;
295 _Constant_binary_fun(
const _Result& __v) : _M_val(__v) {}
298 operator()(
const _Arg1&,
const _Arg2&)
const
317 template <
class _Result>
319 :
public _Constant_void_fun<_Result>
322 : _Constant_void_fun<_Result>(__v) {}
326 template <
class _Result,
class _Argument = _Result>
330 : _Constant_unary_fun<_Result, _Argument>(__v) {}
334 template <
class _Result,
class _Arg1 = _Result,
class _Arg2 = _Arg1>
336 :
public _Constant_binary_fun<_Result, _Arg1, _Arg2>
339 : _Constant_binary_fun<_Result, _Arg1, _Arg2>(__v) {}
343 template <
class _Result>
349 template <
class _Result>
350 inline constant_unary_fun<_Result, _Result>
355 template <
class _Result>
356 inline constant_binary_fun<_Result,_Result,_Result>
371 unsigned int _M_table[55];
380 _M_index1 = (_M_index1 + 1) % 55;
381 _M_index2 = (_M_index2 + 1) % 55;
382 _M_table[_M_index1] = _M_table[_M_index1] - _M_table[_M_index2];
383 return _M_table[_M_index1] % __limit;
387 _M_initialize(
unsigned int __seed)
389 unsigned int __k = 1;
390 _M_table[54] = __seed;
392 for (__i = 0; __i < 54; __i++)
394 size_t __ii = (21 * (__i + 1) % 55) - 1;
395 _M_table[__ii] = __k;
397 __seed = _M_table[__ii];
399 for (
int __loop = 0; __loop < 4; __loop++)
401 for (__i = 0; __i < 55; __i++)
402 _M_table[__i] = _M_table[__i] - _M_table[(1 + __i + 30) % 55];
410 { _M_initialize(__seed); }
414 { _M_initialize(161803398u); }
421 template <
class _Ret,
class _Tp,
class _Arg>
422 inline mem_fun1_t<_Ret, _Tp, _Arg>
423 mem_fun1(_Ret (_Tp::*__f)(_Arg))
424 {
return mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
426 template <
class _Ret,
class _Tp,
class _Arg>
427 inline const_mem_fun1_t<_Ret, _Tp, _Arg>
428 mem_fun1(_Ret (_Tp::*__f)(_Arg)
const)
429 {
return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
431 template <
class _Ret,
class _Tp,
class _Arg>
432 inline mem_fun1_ref_t<_Ret, _Tp, _Arg>
433 mem_fun1_ref(_Ret (_Tp::*__f)(_Arg))
434 {
return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
436 template <
class _Ret,
class _Tp,
class _Arg>
437 inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg>
438 mem_fun1_ref(_Ret (_Tp::*__f)(_Arg)
const)
439 {
return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
441 _GLIBCXX_END_NAMESPACE_VERSION
subtractive_rng(unsigned int __seed)
Ctor allowing you to initialize the seed.
constant_void_fun< _Result > constant0(const _Result &__val)
An SGI extension .
constant_binary_fun< _Result, _Result, _Result > constant2(const _Result &__val)
An SGI extension .
constant_unary_fun< _Result, _Result > constant1(const _Result &__val)
An SGI extension .
unary_compose< _Operation1, _Operation2 > compose1(const _Operation1 &__fn1, const _Operation2 &__fn2)
An SGI extension .
One of the adaptors for member pointers.
One of the math functors.
One of the adaptors for member pointers.
One of the math functors.
One of the adaptors for member pointers.
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.
binary_compose< _Operation1, _Operation2, _Operation3 > compose2(const _Operation1 &__fn1, const _Operation2 &__fn2, const _Operation3 &__fn3)
An SGI extension .