21 #ifndef __TBB__flow_graph_types_impl_H 22 #define __TBB__flow_graph_types_impl_H 24 #ifndef __TBB_flow_graph_H 25 #error Do not #include this internal file directly; use public TBB headers instead. 43 template<
typename Kp,
typename KHashp,
typename Tp>
52 template<
int N,
template<
class>
class PT,
typename TypeTuple>
57 template<
int N,
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
60 template<
template<
class>
class PT,
typename TypeTuple>
62 typedef typename tbb::flow::tuple<
67 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
69 typedef typename KeyTraits::key_type
K;
70 typedef typename KeyTraits::hash_compare_type
KHash;
72 typedef typename tbb::flow::tuple< PT<KeyTrait0> >
type;
75 template<
template<
class>
class PT,
typename TypeTuple>
77 typedef typename tbb::flow::tuple<
83 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
85 typedef typename KeyTraits::key_type
K;
86 typedef typename KeyTraits::hash_compare_type
KHash;
89 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1> >
type;
92 template<
template<
class>
class PT,
typename TypeTuple>
94 typedef typename tbb::flow::tuple<
101 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
103 typedef typename KeyTraits::key_type
K;
104 typedef typename KeyTraits::hash_compare_type
KHash;
108 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2> >
type;
111 template<
template<
class>
class PT,
typename TypeTuple>
113 typedef typename tbb::flow::tuple<
121 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
123 typedef typename KeyTraits::key_type
K;
124 typedef typename KeyTraits::hash_compare_type
KHash;
129 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>,
133 template<
template<
class>
class PT,
typename TypeTuple>
135 typedef typename tbb::flow::tuple<
144 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
146 typedef typename KeyTraits::key_type
K;
147 typedef typename KeyTraits::hash_compare_type
KHash;
153 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>,
154 PT<KeyTrait3>, PT<KeyTrait4> >
type;
157 #if __TBB_VARIADIC_MAX >= 6 158 template<
template<
class>
class PT,
typename TypeTuple>
160 typedef typename tbb::flow::tuple<
170 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
172 typedef typename KeyTraits::key_type
K;
173 typedef typename KeyTraits::hash_compare_type
KHash;
180 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
181 PT<KeyTrait4>, PT<KeyTrait5> >
type;
185 #if __TBB_VARIADIC_MAX >= 7 186 template<
template<
class>
class PT,
typename TypeTuple>
188 typedef typename tbb::flow::tuple<
199 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
201 typedef typename KeyTraits::key_type
K;
202 typedef typename KeyTraits::hash_compare_type
KHash;
210 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
211 PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6> >
type;
215 #if __TBB_VARIADIC_MAX >= 8 216 template<
template<
class>
class PT,
typename TypeTuple>
218 typedef typename tbb::flow::tuple<
230 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
232 typedef typename KeyTraits::key_type
K;
233 typedef typename KeyTraits::hash_compare_type
KHash;
242 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
243 PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7> >
type;
247 #if __TBB_VARIADIC_MAX >= 9 248 template<
template<
class>
class PT,
typename TypeTuple>
250 typedef typename tbb::flow::tuple<
263 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
265 typedef typename KeyTraits::key_type
K;
266 typedef typename KeyTraits::hash_compare_type
KHash;
276 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
277 PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7>, PT<KeyTrait8> >
type;
281 #if __TBB_VARIADIC_MAX >= 10 282 template<
template<
class>
class PT,
typename TypeTuple>
284 typedef typename tbb::flow::tuple<
298 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
300 typedef typename KeyTraits::key_type
K;
301 typedef typename KeyTraits::hash_compare_type
KHash;
312 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
313 PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7>, PT<KeyTrait8>,
314 PT<KeyTrait9> >
type;
318 #if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT 321 template<
int N,
int...
S >
330 #if __TBB_INITIALIZER_LISTS_PRESENT 332 template <
typename T>
344 iterator dst = my_begin;
345 for (
typename std::initializer_list<T>::const_iterator src = il.begin(); src != il.end(); ++src )
346 new (dst++)
T( *src );
351 iterator dst = my_begin;
352 for (
typename std::initializer_list<T>::const_iterator src = ilw.begin(); src != ilw.end(); ++src )
353 new (dst++)
T( *src );
357 #if __TBB_CPP11_RVALUE_REF_PRESENT 359 ilw.my_begin = ilw.my_end = NULL;
380 template<
typename T1,
typename T2,
size_t REM>
387 template<
typename T1,
typename T2>
401 template<
typename T1,
typename T2>
406 static const size_t max_align = t1_align < t2_align ? t2_align : t1_align;
407 static const size_t extra_bytes =
sizeof(just_pair) % max_align;
408 static const size_t remainder = extra_bytes ? max_align - extra_bytes : 0;
437 const value_type &
value()
const {
return value_space; }
451 explicit Wrapper(
const T& other ) : value_space(other) { }
463 template<
typename T,
size_t N>
468 typedef T ArrayType[N];
474 static const size_t space_size =
sizeof(ArrayType) /
sizeof(
char);
475 char value_space[space_size];
480 struct _unwind_class {
486 for(
size_t i = already_built; i > 0 ; --i ) space[i-1].~value_type();
493 char *vp =
const_cast<char *
>(value_space);
494 return reinterpret_cast<ArrayType &
>(*vp);
502 _unwind_class guard((pointer_type)value_space);
503 pointer_type vp =
reinterpret_cast<pointer_type
>(&value_space);
504 for(
size_t i = 0; i < N; ++i ) {
505 (
void)
new(vp++) value_type(other[i]);
506 ++(guard.already_built);
512 _unwind_class guard((pointer_type)value_space);
513 pointer_type dp =
reinterpret_cast<pointer_type
>(value_space);
514 pointer_type sp =
reinterpret_cast<pointer_type
>(
const_cast<char *
>(other.
value_space));
515 for(
size_t i = 0; i < N; ++i, ++dp, ++sp) {
516 (
void)
new(dp) value_type(*sp);
517 ++(guard.already_built);
528 pointer_type vp =
reinterpret_cast<pointer_type
>(&value_space);
529 for(
size_t i = N; i > 0 ; --i ) vp[i-1].~value_type();
537 template<
bool,
class T1,
class T2>
struct pick_one;
538 template<
class T1,
class T2>
struct pick_one<true , T1, T2> {
typedef T1
type; };
539 template<
class T1,
class T2>
struct pick_one<false, T1, T2> {
typedef T2
type; };
541 template<
template<
class>
class Selector,
typename T1,
typename T2 >
546 template<
typename T>
struct size_of {
static const int value =
sizeof(
T); };
548 template<
size_t N,
class Tuple,
template<
class>
class Selector >
struct pick_tuple_max {
554 template<
class Tuple,
template<
class>
class Selector >
struct pick_tuple_max<0, Tuple, Selector> {
559 template<
class Q,
size_t N,
class Tuple>
561 typedef typename tbb::flow::tuple_element<N-1, Tuple>
::type T_i;
565 template<
class Q,
class Tuple>
576 template<
typename T,
bool BUILD_IT>
struct do_if;
603 typedef tbb::flow::tuple<T0, T1, T2, T3, T4
605 #if __TBB_VARIADIC_MAX >= 6 608 #if __TBB_VARIADIC_MAX >= 7 611 #if __TBB_VARIADIC_MAX >= 8 614 #if __TBB_VARIADIC_MAX >= 9 617 #if __TBB_VARIADIC_MAX >= 10 628 static const size_t MaxNElements = MaxNBytes/
sizeof(AlignType);
631 static const size_t MaxSize =
sizeof(SpaceType);
682 template<
typename T,
typename R>
683 tagged_msg(
T const &index, R
const &value) : my_tag(index), my_msg(value) {}
685 #if __TBB_CONST_REF_TO_ARRAY_TEMPLATE_PARAM_BROKEN 686 template<
typename T,
typename R,
size_t N>
687 tagged_msg(
T const &index, R (&value)[N]) : my_tag(index), my_msg(value) {}
690 void set_tag(TagType
const &index) {my_tag = index;}
691 TagType
tag()
const {
return my_tag;}
694 const V&
cast_to()
const {
return my_msg.template variant_cast_to<V>();}
697 bool is_a()
const {
return my_msg.template variant_is_a<V>();}
703 template<
typename V,
typename T>
704 const V&
cast_to(
T const &t) {
return t.template cast_to<V>(); }
706 template<
typename V,
typename T>
707 bool is_a(
T const &t) {
return t.template is_a<V>(); }
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 4, TypeTuple >::type > KeyTrait4
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
Wrapper(const ArrayType &other)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
~initializer_list_wrapper()
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function h
tbb::flow::tuple_element< N-1, Tuple >::type ThisType
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
T punned_cast(U *ptr)
Cast between unrelated pointer types.
static void construct(void *mySpace, const T &x)
tbb::flow::tuple_element< 0, Tuple >::type T_i
virtual void CopyTo(void *) const
#define __TBB_NOEXCEPT(expression)
type_plus_align< T1, T2, 0 > just_pair
Detects whether two given types are the same.
const V & cast_to() const
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
auto first(Container &c) -> decltype(begin(c))
tbb::flow::tuple< PT< typename tbb::flow::tuple_element< 0, TypeTuple >::type > > type
const_iterator begin() const __TBB_NOEXCEPT(true)
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type type
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 3, TypeTuple >::type > KeyTrait3
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 >, PT< KeyTrait3 >, PT< KeyTrait4 > > type
const T & const_reference
initializer_list_wrapper(const initializer_list_wrapper< T > &ilw) __TBB_NOEXCEPT(true)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 2, TypeTuple >::type > KeyTrait2
KeyTraits::hash_compare_type KHash
bool is_default_constructed() const
tbb::flow::tuple< PT< typename tbb::flow::tuple_element< 0, TypeTuple >::type >, PT< typename tbb::flow::tuple_element< 1, TypeTuple >::type >, PT< typename tbb::flow::tuple_element< 2, TypeTuple >::type > > type
void const char const char int ITT_FORMAT __itt_group_sync p
internal::type_to_key_function_body< T, K > TtoK
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 > > type
tbb::flow::tuple< PT< KeyTrait0 > > type
void throw_exception(exception_id eid)
Versionless convenience wrapper for throw_exception_v4()
tbb::flow::tuple< T0, T1, T2, T3, T4 > Tuple
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t ITT_FORMAT lu const __itt_domain __itt_id __itt_relation __itt_id ITT_FORMAT p const wchar_t int ITT_FORMAT __itt_group_mark S
_unwind_space(pointer_type p)
variant(const variant &other)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
pick_max< Selector, LeftMaxType, ThisType >::type type
tbb::flow::tuple< PT< typename tbb::flow::tuple_element< 0, TypeTuple >::type >, PT< typename tbb::flow::tuple_element< 1, TypeTuple >::type > > type
Wrapper(const Wrapper &other)
initializer_list_wrapper(std::initializer_list< T > il) __TBB_NOEXCEPT(true)
KeyTraits::hash_compare_type KHash
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 3, TypeTuple >::type > KeyTrait3
pick_tuple_max< N-1, Tuple, Selector >::type LeftMaxType
type_plus_align< T1, T2, remainder > type
KeyTraits::hash_compare_type KHash
const ArrayType & value() const
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
const U & variant_cast_to() const
const value_type & value() const
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long value
void CopyTo(void *newSpace) const __TBB_override
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 >, PT< KeyTrait3 > > type
static void construct(void *, const T &x)
void set_tag(TagType const &index)
pick_tuple_max< N, Tuple, alignment_of >::type AlignType
void operator=(const variant &rhs)
Wrapper(const Wrapper &other)
tbb::flow::tuple< PT< typename tbb::flow::tuple_element< 0, TypeTuple >::type >, PT< typename tbb::flow::tuple_element< 1, TypeTuple >::type >, PT< typename tbb::flow::tuple_element< 2, TypeTuple >::type >, PT< typename tbb::flow::tuple_element< 3, TypeTuple >::type > > type
_unwind_class(pointer_type p)
KeyTraits::hash_compare_type KHash
tbb::flow::tuple< PT< typename tbb::flow::tuple_element< 0, TypeTuple >::type >, PT< typename tbb::flow::tuple_element< 1, TypeTuple >::type >, PT< typename tbb::flow::tuple_element< 2, TypeTuple >::type >, PT< typename tbb::flow::tuple_element< 3, TypeTuple >::type >, PT< typename tbb::flow::tuple_element< 4, TypeTuple >::type > > type
const V & cast_to(T const &t)
type mimicking std::pair but with trailing fill to ensure each element of an array ...
tbb::flow::tuple_element< N-1, Tuple >::type T_i
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 2, TypeTuple >::type > KeyTrait2
size_t size() const __TBB_NOEXCEPT(true)
const_iterator end() const __TBB_NOEXCEPT(true)
tbb::aligned_space< AlignType, MaxNElements > SpaceType
bool variant_is_default_constructed() const
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t size
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 2, TypeTuple >::type > KeyTrait2
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
initializer_list_wrapper(initializer_list_wrapper< T > &&ilw) __TBB_NOEXCEPT(true)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
void CopyTo(void *newSpace) const __TBB_override
pick_one<(Selector< T1 >::value > Selector< T2 >::value), T1, T2 >::type type
bool variant_is_a() const
pick_tuple_max< N, Tuple, size_of >::type MaxSizeType
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
KeyTraits::hash_compare_type KHash
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 > > type
tagged_msg(T const &index, R const &value)
tbb::flow::tuple_element< 0, Tuple >::type type