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 template<
template<
class>
class PT,
typename TypeTuple>
58 typedef typename tbb::flow::tuple<
63 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
65 typedef typename KeyTraits::key_type
K;
66 typedef typename KeyTraits::hash_compare_type
KHash;
68 typedef typename tbb::flow::tuple< PT<KeyTrait0> >
type;
71 template<
template<
class>
class PT,
typename TypeTuple>
73 typedef typename tbb::flow::tuple<
79 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
81 typedef typename KeyTraits::key_type
K;
82 typedef typename KeyTraits::hash_compare_type
KHash;
85 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1> >
type;
88 template<
template<
class>
class PT,
typename TypeTuple>
90 typedef typename tbb::flow::tuple<
97 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
99 typedef typename KeyTraits::key_type
K;
100 typedef typename KeyTraits::hash_compare_type
KHash;
104 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2> >
type;
107 template<
template<
class>
class PT,
typename TypeTuple>
109 typedef typename tbb::flow::tuple<
117 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
119 typedef typename KeyTraits::key_type
K;
120 typedef typename KeyTraits::hash_compare_type
KHash;
125 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>,
129 template<
template<
class>
class PT,
typename TypeTuple>
131 typedef typename tbb::flow::tuple<
140 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
142 typedef typename KeyTraits::key_type
K;
143 typedef typename KeyTraits::hash_compare_type
KHash;
149 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>,
150 PT<KeyTrait3>, PT<KeyTrait4> >
type;
153 #if __TBB_VARIADIC_MAX >= 6 154 template<
template<
class>
class PT,
typename TypeTuple>
156 typedef typename tbb::flow::tuple<
166 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
167 struct wrap_key_tuple_elements<6, PT, KeyTraits, TypeTuple> {
168 typedef typename KeyTraits::key_type K;
169 typedef typename KeyTraits::hash_compare_type KHash;
176 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
177 PT<KeyTrait4>, PT<KeyTrait5> >
type;
181 #if __TBB_VARIADIC_MAX >= 7 182 template<
template<
class>
class PT,
typename TypeTuple>
183 struct wrap_tuple_elements<7, PT, TypeTuple> {
184 typedef typename tbb::flow::tuple<
195 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
196 struct wrap_key_tuple_elements<7, PT, KeyTraits, TypeTuple> {
197 typedef typename KeyTraits::key_type K;
198 typedef typename KeyTraits::hash_compare_type KHash;
206 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
207 PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6> >
type;
211 #if __TBB_VARIADIC_MAX >= 8 212 template<
template<
class>
class PT,
typename TypeTuple>
213 struct wrap_tuple_elements<8, PT, TypeTuple> {
214 typedef typename tbb::flow::tuple<
226 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
227 struct wrap_key_tuple_elements<8, PT, KeyTraits, TypeTuple> {
228 typedef typename KeyTraits::key_type K;
229 typedef typename KeyTraits::hash_compare_type KHash;
238 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
239 PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7> >
type;
243 #if __TBB_VARIADIC_MAX >= 9 244 template<
template<
class>
class PT,
typename TypeTuple>
245 struct wrap_tuple_elements<9, PT, TypeTuple> {
246 typedef typename tbb::flow::tuple<
259 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
260 struct wrap_key_tuple_elements<9, PT, KeyTraits, TypeTuple> {
261 typedef typename KeyTraits::key_type K;
262 typedef typename KeyTraits::hash_compare_type KHash;
272 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
273 PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7>, PT<KeyTrait8> >
type;
277 #if __TBB_VARIADIC_MAX >= 10 278 template<
template<
class>
class PT,
typename TypeTuple>
279 struct wrap_tuple_elements<10, PT, TypeTuple> {
280 typedef typename tbb::flow::tuple<
294 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
295 struct wrap_key_tuple_elements<10, PT, KeyTraits, TypeTuple> {
296 typedef typename KeyTraits::key_type K;
297 typedef typename KeyTraits::hash_compare_type KHash;
308 typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
309 PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7>, PT<KeyTrait8>,
310 PT<KeyTrait9> >
type;
314 #if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT 317 template<
int N,
int...
S >
326 #if __TBB_INITIALIZER_LISTS_PRESENT 328 template <
typename T>
341 for (
typename std::initializer_list<T>::const_iterator src = il.begin(); src != il.end(); ++src )
342 new (dst++) T( *src );
348 for (
typename std::initializer_list<T>::const_iterator src = ilw.begin(); src != ilw.end(); ++src )
349 new (dst++) T( *src );
353 #if __TBB_CPP11_RVALUE_REF_PRESENT 355 ilw.my_begin = ilw.my_end = NULL;
376 template<
typename T1,
typename T2,
size_t REM>
383 template<
typename T1,
typename T2>
397 template<
typename T1,
typename T2>
459 template<
typename T,
size_t N>
464 typedef T ArrayType[N];
470 static const size_t space_size =
sizeof(ArrayType) /
sizeof(
char);
476 struct _unwind_class {
482 for(
size_t i = already_built; i > 0 ; --i ) space[i-1].~
value_type();
490 return reinterpret_cast<ArrayType &>(*vp);
500 for(
size_t i = 0; i < N; ++i ) {
502 ++(guard.already_built);
511 for(
size_t i = 0; i < N; ++i, ++dp, ++sp) {
513 ++(guard.already_built);
525 for(
size_t i = N; i > 0 ; --i ) vp[i-1].~
value_type();
533 template<
bool,
class T1,
class T2>
struct pick_one;
534 template<
class T1,
class T2>
struct pick_one<true , T1, T2> {
typedef T1
type; };
535 template<
class T1,
class T2>
struct pick_one<false, T1, T2> {
typedef T2
type; };
537 template<
template<
class>
class Selector,
typename T1,
typename T2 >
542 template<
typename T>
struct size_of {
static const int value =
sizeof(T); };
544 template<
size_t N,
class Tuple,
template<
class>
class Selector >
struct pick_tuple_max {
550 template<
class Tuple,
template<
class>
class Selector >
struct pick_tuple_max<0, Tuple, Selector> {
555 template<
class Q,
size_t N,
class Tuple>
557 typedef typename tbb::flow::tuple_element<N-1, Tuple>
::type T_i;
561 template<
class Q,
class Tuple>
572 template<
typename T,
bool BUILD_IT>
struct do_if;
599 typedef tbb::flow::tuple<T0, T1, T2, T3, T4
601 #if __TBB_VARIADIC_MAX >= 6 604 #if __TBB_VARIADIC_MAX >= 7 607 #if __TBB_VARIADIC_MAX >= 8 610 #if __TBB_VARIADIC_MAX >= 9 613 #if __TBB_VARIADIC_MAX >= 10 678 template<
typename T,
typename R>
681 #if __TBB_CONST_REF_TO_ARRAY_TEMPLATE_PARAM_BROKEN 682 template<
typename T,
typename R,
size_t N>
693 bool is_a()
const {
return my_msg.template variant_is_a<V>();}
699 template<
typename V,
typename T>
700 const V&
cast_to(T
const &t) {
return t.template cast_to<V>(); }
702 template<
typename V,
typename T>
703 bool is_a(T
const &t) {
return t.template is_a<V>(); }
const U & variant_cast_to() 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 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
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
const ArrayType & value() const
const_iterator begin() const __TBB_NOEXCEPT(true)
pick_tuple_max< N, Tuple, alignment_of >::type AlignType
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 >, PT< KeyTrait3 >, PT< KeyTrait4 > > type
size_t size() const __TBB_NOEXCEPT(true)
pick_tuple_max< N-1, Tuple, Selector >::type LeftMaxType
initializer_list_wrapper(const initializer_list_wrapper< T > &ilw) __TBB_NOEXCEPT(true)
static const size_t remainder
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 > > type
initializer_list_wrapper(std::initializer_list< T > il) __TBB_NOEXCEPT(true)
KeyTraits::hash_compare_type KHash
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
tbb::flow::tuple< PT< typename tbb::flow::tuple_element< 0, TypeTuple >::type > > type
static void construct(void *mySpace, const T &x)
variant(const variant &other)
KeyTraits::hash_compare_type KHash
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 4, TypeTuple >::type > KeyTrait4
Wrapper(const ArrayType &other)
tbb::flow::tuple_element< 0, Tuple >::type type
type_plus_align< T1, T2, remainder > type
T punned_cast(U *ptr)
Cast between unrelated pointer types.
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 > > type
Detects whether two given types are the same.
const T & const_reference
static const size_t MaxNElements
static const size_t MaxSize
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 2, TypeTuple >::type > KeyTrait2
pick_one<(Selector< T1 >::value > Selector< T2 >::value), T1, T2 >::type type
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
void CopyTo(void *newSpace) const __TBB_override
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
static void construct(void *, const T &x)
type_plus_align< T1, T2, 0 > just_pair
const V & cast_to() const
tbb::aligned_space< AlignType, MaxNElements > SpaceType
void CopyTo(void *newSpace) const __TBB_override
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 3, TypeTuple >::type > KeyTrait3
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
void operator=(const variant &rhs)
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
bool variant_is_default_constructed() const
bool variant_is_a() const
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 2, TypeTuple >::type > KeyTrait2
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
initializer_list_wrapper(initializer_list_wrapper< T > &&ilw) __TBB_NOEXCEPT(true)
tbb::flow::tuple_element< N-1, Tuple >::type T_i
static const size_t value
tbb::flow::tuple< PT< typename tbb::flow::tuple_element< 0, TypeTuple >::type >, PT< typename tbb::flow::tuple_element< 1, TypeTuple >::type > > type
KeyTraits::hash_compare_type KHash
_unwind_space(pointer_type p)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 3, TypeTuple >::type > KeyTrait3
void throw_exception(exception_id eid)
Versionless convenience wrapper for throw_exception_v4()
pick_max< Selector, LeftMaxType, ThisType >::type type
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 >, PT< typename tbb::flow::tuple_element< 3, TypeTuple >::type >, PT< typename tbb::flow::tuple_element< 4, TypeTuple >::type > > type
tbb::flow::tuple_element< 0, Tuple >::type T_i
KeyTraits::hash_compare_type KHash
void set_tag(TagType const &index)
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
static const size_t t1_align
void const char const char int ITT_FORMAT __itt_group_sync p
_unwind_class(pointer_type p)
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 >, PT< KeyTrait3 > > type
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
tbb::flow::tuple< T0, T1, T2, T3, T4 > Tuple
pick_tuple_max< N, Tuple, size_of >::type MaxSizeType
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
tbb::flow::tuple< PT< KeyTrait0 > > type
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
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< 0, TypeTuple >::type > KeyTrait0
~initializer_list_wrapper()
type mimicking std::pair but with trailing fill to ensure each element of an array
tagged_msg(T const &index, R const &value)
internal::type_to_key_function_body< T, K > TtoK
const_iterator end() const __TBB_NOEXCEPT(true)
static const size_t max_align
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 2, TypeTuple >::type > KeyTrait2
Wrapper(const Wrapper &other)
const V & cast_to(T const &t)
static const size_t MaxNBytes
static const size_t t2_align
virtual void CopyTo(void *) const
const value_type & value() const
#define __TBB_NOEXCEPT(expression)
Wrapper(const Wrapper &other)
tbb::flow::tuple_element< N-1, Tuple >::type ThisType
static const size_t extra_bytes