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
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.
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.
One of the adaptors for member pointers.
One of the adaptors for member pointers.
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 .
constant_void_fun< _Result > constant0(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 math functors.