32 #ifndef _GLIBCXX_PARALLEL_BASE_H
33 #define _GLIBCXX_PARALLEL_BASE_H 1
48 namespace std _GLIBCXX_VISIBILITY(default)
50 namespace __parallel { }
57 namespace __gnu_parallel
60 using namespace std::__parallel;
67 namespace __gnu_sequential
70 #ifdef _GLIBCXX_PARALLEL
71 using namespace std::_GLIBCXX_STD_A;
78 namespace __gnu_parallel
88 return __i > 1 ? __i : 1;
100 template<
typename _Size>
105 for (__k = 0; __n > 1; __n >>= 1)
142 template<
typename _Tp>
144 min(
const _Tp& __a,
const _Tp& __b)
145 {
return (__a < __b) ? __a : __b; }
148 template<
typename _Tp>
150 max(
const _Tp& __a,
const _Tp& __b)
151 {
return (__a > __b) ? __a : __b; }
156 template<
typename _T1,
typename _T2,
typename _Compare>
165 bool operator()(
const _T1& __a,
const _T2& __b)
166 {
return !_M_comp(__a, __b) && !_M_comp(__b, __a); }
172 template<
typename _Predicate,
typename argument_type>
185 {
return !_M_pred(__x); }
190 template<
typename _Operation,
typename _FirstArgumentType,
191 typename _SecondArgumentType,
typename _ResultType>
197 _FirstArgumentType _M_value;
200 __binder1st(
const _Operation& __x,
const _FirstArgumentType& __y)
201 : _M_op(__x), _M_value(__y) { }
204 operator()(
const _SecondArgumentType& __x)
205 {
return _M_op(_M_value, __x); }
210 operator()(_SecondArgumentType& __x)
const
211 {
return _M_op(_M_value, __x); }
218 template<
typename _Operation,
typename _FirstArgumentType,
219 typename _SecondArgumentType,
typename _ResultType>
225 _SecondArgumentType _M_value;
228 __binder2nd(
const _Operation& __x,
const _SecondArgumentType& __y)
229 : _M_op(__x), _M_value(__y) { }
232 operator()(
const _FirstArgumentType& __x)
const
233 {
return _M_op(__x, _M_value); }
238 operator()(_FirstArgumentType& __x)
239 {
return _M_op(__x, _M_value); }
243 template<
typename _T1,
typename _T2>
246 bool operator()(
const _T1& __t1,
const _T2& __t2)
const
247 {
return __t1 == __t2; }
251 template<
typename _T1,
typename _T2>
255 operator()(
const _T1& __t1,
const _T2& __t2)
const
256 {
return __t1 < __t2; }
259 operator()(
const _T2& __t2,
const _T1& __t1)
const
260 {
return __t2 < __t1; }
264 template<
typename _Tp>
265 struct _Less<_Tp, _Tp>
269 template<
typename _Tp1,
typename _Tp2,
typename _Result
270 = __typeof__(*static_cast<_Tp1*>(0)
271 + *static_cast<_Tp2*>(0))>
275 operator()(
const _Tp1& __x,
const _Tp2& __y)
const
276 {
return __x + __y; }
280 template<
typename _Tp>
281 struct _Plus<_Tp, _Tp, _Tp>
285 template<
typename _Tp1,
typename _Tp2,
typename _Result
286 = __typeof__(*static_cast<_Tp1*>(0)
287 * *static_cast<_Tp2*>(0))>
291 operator()(
const _Tp1& __x,
const _Tp2& __y)
const
292 {
return __x * __y; }
296 template<
typename _Tp>
305 template<
typename _Tp,
typename _DifferenceTp>
309 typedef _DifferenceTp _DifferenceType;
312 : _M_val(__val), _M_pos(__pos) { }
337 {
return _M_pos == __i2._M_pos; }
341 {
return _M_pos != __i2._M_pos; }
345 {
return _M_pos - __i2._M_pos; }
349 _DifferenceType _M_pos;
358 template<
typename _Tp,
typename _DifferenceTp>
362 typedef _DifferenceTp _DifferenceType;
372 : _M_val(__val), _M_count(__count) { }
382 {
return iterator(_M_val, _M_count); }
386 _DifferenceType _M_count;
396 template<
typename _RAIter,
typename _Compare>
399 _RAIter __c, _Compare __comp)
401 if (__comp(*__a, *__b))
402 if (__comp(*__b, *__c))
405 if (__comp(*__a, *__c))
412 if (__comp(*__a, *__c))
415 if (__comp(*__b, *__c))
422 #define _GLIBCXX_PARALLEL_ASSERT(_Condition) __glibcxx_assert(_Condition)
_Parallelism
Run-time equivalents for the compile-time tags.
Similar to std::equal_to, but allows two different types.
reference operator[](size_t __position)
Array-indexing support.
Similar to std::binder1st, but giving the argument types explicitly.
static const int _CASable_bits
Number of bits of _CASable.
int64_t _CASable
Longest compare-and-swappable integer type on this platform.
iterator end() const
End iterator.
uint16_t _ThreadIndex
Unsigned integer to index a thread number. The maximum thread number (for each processor) must fit in...
Similar to std::multiplies, but allows two different types.
_CASable __encode2(int __a, int __b)
Encode two integers into one gnu_parallel::_CASable.
Constructs predicate for equality from strict weak ordering predicate.
Similar to std::plus, but allows two different types.
One of the math functors.
End-user include file. Provides advanced settings and tuning options. This file is a GNU parallel ext...
Defines on whether to include algorithm variants.
Includes the original header files concerned with iterators except for stream iterators. This file is a GNU parallel extension to the Standard C++ Library.
void __decode2(_CASable __x, int &__a, int &__b)
Decode two integers from one gnu_parallel::_CASable.
_Size __rd_log2(_Size __n)
Calculates the rounded-down logarithm of __n for base 2.
static const _CASable _CASable_mask
_CASable with the right half of bits set to 1.
_PseudoSequence(const _Tp &__val, _DifferenceType __count)
Constructor.
Similar to std::less, but allows two different types.
One of the math functors.
const _Tp & min(const _Tp &__a, const _Tp &__b)
Equivalent to std::min.
Sequence that conceptually consists of multiple copies of the same element. The copies are not stored...
One of the comparison functors.
Similar to std::binder2nd, but giving the argument types explicitly.
iterator begin() const
Begin iterator.
_Iterator associated with __gnu_parallel::_PseudoSequence. If features the usual random-access iterat...
_RAIter __median_of_three_iterators(_RAIter __a, _RAIter __b, _RAIter __c, _Compare __comp)
Compute the median of three referenced elements, according to __comp.
argument_type argument_type
argument_type is the type of the argument
Similar to std::unary_negate, but giving the argument types explicitly.
const _Tp & max(const _Tp &__a, const _Tp &__b)
Equivalent to std::max.