17 #ifndef __TBB__flow_graph_types_impl_H 18 #define __TBB__flow_graph_types_impl_H 20 #ifndef __TBB_flow_graph_H 21 #error Do not #include this internal file directly; use public TBB headers instead. 39 template<
typename Kp,
typename KHashp,
typename Tp>
48 template<
int N,
template<
class>
class PT,
typename TypeTuple>
53 template<
int N,
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
56 #if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_VARIADIC_TUPLE_PRESENT 57 template<
int N,
template<
class>
class PT,
typename... Args>
59 typedef typename tbb::flow::tuple<PT<Args>... >
type;
62 template<
int N,
template<
class>
class PT,
typename KeyTraits,
typename... Args>
64 typedef typename KeyTraits::key_type K;
65 typedef typename KeyTraits::hash_compare_type KHash;
66 typedef typename tbb::flow::tuple<PT<KeyTrait<K, KHash, Args> >... >
type;
69 template<
template<
class>
class PT,
typename TypeTuple>
71 typedef typename tbb::flow::tuple<
76 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
78 typedef typename KeyTraits::key_type
K;
79 typedef typename KeyTraits::hash_compare_type
KHash;
81 typedef typename tbb::flow::tuple< PT<KeyTrait0> >
type;
84 template<
template<
class>
class PT,
typename TypeTuple>
86 typedef typename tbb::flow::tuple<
92 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
94 typedef typename KeyTraits::key_type
K;
95 typedef typename KeyTraits::hash_compare_type
KHash;
98 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1> >
type;
101 template<
template<
class>
class PT,
typename TypeTuple>
103 typedef typename tbb::flow::tuple<
110 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
112 typedef typename KeyTraits::key_type
K;
113 typedef typename KeyTraits::hash_compare_type
KHash;
117 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2> >
type;
120 template<
template<
class>
class PT,
typename TypeTuple>
122 typedef typename tbb::flow::tuple<
130 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
132 typedef typename KeyTraits::key_type
K;
133 typedef typename KeyTraits::hash_compare_type
KHash;
138 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>,
142 template<
template<
class>
class PT,
typename TypeTuple>
144 typedef typename tbb::flow::tuple<
153 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
155 typedef typename KeyTraits::key_type
K;
156 typedef typename KeyTraits::hash_compare_type
KHash;
162 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>,
163 PT<KeyTrait3>, PT<KeyTrait4> >
type;
166 #if __TBB_VARIADIC_MAX >= 6 167 template<
template<
class>
class PT,
typename TypeTuple>
169 typedef typename tbb::flow::tuple<
179 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
180 struct wrap_key_tuple_elements<6, PT, KeyTraits, TypeTuple> {
181 typedef typename KeyTraits::key_type K;
182 typedef typename KeyTraits::hash_compare_type KHash;
189 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
190 PT<KeyTrait4>, PT<KeyTrait5> >
type;
194 #if __TBB_VARIADIC_MAX >= 7 195 template<
template<
class>
class PT,
typename TypeTuple>
196 struct wrap_tuple_elements<7, PT, TypeTuple> {
197 typedef typename tbb::flow::tuple<
208 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
209 struct wrap_key_tuple_elements<7, PT, KeyTraits, TypeTuple> {
210 typedef typename KeyTraits::key_type K;
211 typedef typename KeyTraits::hash_compare_type KHash;
219 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
220 PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6> >
type;
224 #if __TBB_VARIADIC_MAX >= 8 225 template<
template<
class>
class PT,
typename TypeTuple>
226 struct wrap_tuple_elements<8, PT, TypeTuple> {
227 typedef typename tbb::flow::tuple<
239 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
240 struct wrap_key_tuple_elements<8, PT, KeyTraits, TypeTuple> {
241 typedef typename KeyTraits::key_type K;
242 typedef typename KeyTraits::hash_compare_type KHash;
251 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
252 PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7> >
type;
256 #if __TBB_VARIADIC_MAX >= 9 257 template<
template<
class>
class PT,
typename TypeTuple>
258 struct wrap_tuple_elements<9, PT, TypeTuple> {
259 typedef typename tbb::flow::tuple<
272 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
273 struct wrap_key_tuple_elements<9, PT, KeyTraits, TypeTuple> {
274 typedef typename KeyTraits::key_type K;
275 typedef typename KeyTraits::hash_compare_type KHash;
285 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
286 PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7>, PT<KeyTrait8> >
type;
290 #if __TBB_VARIADIC_MAX >= 10 291 template<
template<
class>
class PT,
typename TypeTuple>
292 struct wrap_tuple_elements<10, PT, TypeTuple> {
293 typedef typename tbb::flow::tuple<
307 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
308 struct wrap_key_tuple_elements<10, PT, KeyTraits, TypeTuple> {
309 typedef typename KeyTraits::key_type K;
310 typedef typename KeyTraits::hash_compare_type KHash;
321 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
322 PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7>, PT<KeyTrait8>,
323 PT<KeyTrait9> >
type;
328 #if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT 331 template<
int N,
int...
S >
340 #if __TBB_INITIALIZER_LISTS_PRESENT 342 template <
typename T>
355 for (
typename std::initializer_list<T>::const_iterator src = il.begin(); src != il.end(); ++src )
356 new (dst++) T( *src );
362 for (
typename std::initializer_list<T>::const_iterator src = ilw.begin(); src != ilw.end(); ++src )
363 new (dst++) T( *src );
367 #if __TBB_CPP11_RVALUE_REF_PRESENT 369 ilw.my_begin = ilw.my_end = NULL;
390 template<
typename T1,
typename T2,
size_t REM>
397 template<
typename T1,
typename T2>
411 template<
typename T1,
typename T2>
473 template<
typename T,
size_t N>
478 typedef T ArrayType[N];
484 static const size_t space_size =
sizeof(ArrayType) /
sizeof(
char);
490 struct _unwind_class {
496 for(
size_t i = already_built; i > 0 ; --i ) space[i-1].~
value_type();
504 return reinterpret_cast<ArrayType &>(*vp);
514 for(
size_t i = 0; i < N; ++i ) {
516 ++(guard.already_built);
525 for(
size_t i = 0; i < N; ++i, ++dp, ++sp) {
527 ++(guard.already_built);
539 for(
size_t i = N; i > 0 ; --i ) vp[i-1].~
value_type();
547 template<
bool,
class T1,
class T2>
struct pick_one;
548 template<
class T1,
class T2>
struct pick_one<true , T1, T2> {
typedef T1
type; };
549 template<
class T1,
class T2>
struct pick_one<false, T1, T2> {
typedef T2
type; };
551 template<
template<
class>
class Selector,
typename T1,
typename T2 >
556 template<
typename T>
struct size_of {
static const int value =
sizeof(T); };
558 template<
size_t N,
class Tuple,
template<
class>
class Selector >
struct pick_tuple_max {
564 template<
class Tuple,
template<
class>
class Selector >
struct pick_tuple_max<0, Tuple, Selector> {
569 template<
class Q,
size_t N,
class Tuple>
571 typedef typename tbb::flow::tuple_element<N-1, Tuple>
::type T_i;
575 template<
class Q,
class Tuple>
586 template<
typename T,
bool BUILD_IT>
struct do_if;
613 typedef tbb::flow::tuple<T0, T1, T2, T3, T4
615 #if __TBB_VARIADIC_MAX >= 6 618 #if __TBB_VARIADIC_MAX >= 7 621 #if __TBB_VARIADIC_MAX >= 8 624 #if __TBB_VARIADIC_MAX >= 9 627 #if __TBB_VARIADIC_MAX >= 10 639 typedef typename tbb::aligned_space<AlignType, MaxNElements>
SpaceType;
692 template<
typename T,
typename R>
695 #if __TBB_CONST_REF_TO_ARRAY_TEMPLATE_PARAM_BROKEN 696 template<
typename T,
typename R,
size_t N>
707 bool is_a()
const {
return my_msg.template variant_is_a<V>();}
713 template<
typename V,
typename T>
714 const V&
cast_to(T
const &t) {
return t.template cast_to<V>(); }
716 template<
typename V,
typename T>
717 bool is_a(T
const &t) {
return t.template is_a<V>(); }
static const size_t MaxSize
const_iterator begin() const __TBB_NOEXCEPT(true)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
tbb::flow::tuple_element< 0, Tuple >::type type
const V & cast_to(T const &t)
size_t size() 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 h
static const size_t remainder
~initializer_list_wrapper()
static const size_t max_align
Wrapper(const Wrapper &other)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
tbb::flow::tuple_element< N-1, Tuple >::type T_i
static const size_t t2_align
const V & cast_to() const
tbb::flow::tuple< PT< typename tbb::flow::tuple_element< 0, TypeTuple >::type >, PT< typename tbb::flow::tuple_element< 1, TypeTuple >::type > > type
const value_type & value() const
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
_unwind_space(pointer_type p)
Wrapper(const Wrapper &other)
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_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
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 3, TypeTuple >::type > KeyTrait3
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 > > type
type_plus_align< T1, T2, remainder > type
KeyTraits::hash_compare_type KHash
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 > > type
type mimicking std::pair but with trailing fill to ensure each element of an array
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 2, TypeTuple >::type > KeyTrait2
pick_one<(Selector< T1 >::value > Selector< T2 >::value), T1, T2 >::type type
T punned_cast(U *ptr)
Cast between unrelated pointer types.
void CopyTo(void *newSpace) const __TBB_override
Wrapper(const ArrayType &other)
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 >, PT< KeyTrait3 > > type
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
type_plus_align< T1, T2, 0 > just_pair
const T & const_reference
initializer_list_wrapper(const initializer_list_wrapper< T > &ilw) __TBB_NOEXCEPT(true)
KeyTraits::hash_compare_type KHash
initializer_list_wrapper(std::initializer_list< T > il) __TBB_NOEXCEPT(true)
static void construct(void *, const T &x)
static void construct(void *mySpace, const T &x)
tbb::aligned_space< AlignType, MaxNElements > SpaceType
bool variant_is_default_constructed() const
static const size_t MaxNBytes
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 4, TypeTuple >::type > KeyTrait4
#define __TBB_NOEXCEPT(expression)
bool is_default_constructed() const
initializer_list_wrapper(initializer_list_wrapper< T > &&ilw) __TBB_NOEXCEPT(true)
void set_tag(TagType const &index)
static const size_t t1_align
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
void const char const char int ITT_FORMAT __itt_group_sync p
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 2, TypeTuple >::type > KeyTrait2
const U & variant_cast_to() const
tbb::flow::tuple< T0, T1, T2, T3, T4 > Tuple
variant(const variant &other)
tbb::flow::tuple_element< N-1, Tuple >::type ThisType
static const size_t value
pick_tuple_max< N, Tuple, alignment_of >::type AlignType
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 3, TypeTuple >::type > KeyTrait3
void CopyTo(void *newSpace) const __TBB_override
internal::type_to_key_function_body< T, K > TtoK
const_iterator end() const __TBB_NOEXCEPT(true)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
KeyTraits::hash_compare_type KHash
pick_max< Selector, LeftMaxType, ThisType >::type type
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 2, TypeTuple >::type > KeyTrait2
Detects whether two given types are the same.
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
static const size_t extra_bytes
static const size_t MaxNElements
tbb::flow::tuple< PT< KeyTrait0 > > type
bool variant_is_a() const
tbb::flow::tuple_element< 0, Tuple >::type T_i
KeyTraits::hash_compare_type KHash
virtual void CopyTo(void *) const
const ArrayType & value() const
tagged_msg(T const &index, R const &value)
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 >, PT< KeyTrait3 >, PT< KeyTrait4 > > type
_unwind_class(pointer_type p)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
void throw_exception(exception_id eid)
Versionless convenience wrapper for throw_exception_v4()
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 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_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< 0, TypeTuple >::type > KeyTrait0
pick_tuple_max< N, Tuple, size_of >::type MaxSizeType
void operator=(const variant &rhs)
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
pick_tuple_max< N-1, Tuple, Selector >::type LeftMaxType
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 > > type
tbb::flow::tuple< PT< typename tbb::flow::tuple_element< 0, TypeTuple >::type > > type