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>
171 struct wrap_key_tuple_elements<6, PT, KeyTraits, 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>
187 struct wrap_tuple_elements<7, PT, TypeTuple> {
188 typedef typename tbb::flow::tuple<
199 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
200 struct wrap_key_tuple_elements<7, PT, KeyTraits, 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>
217 struct wrap_tuple_elements<8, PT, TypeTuple> {
218 typedef typename tbb::flow::tuple<
230 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
231 struct wrap_key_tuple_elements<8, PT, KeyTraits, 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>
249 struct wrap_tuple_elements<9, PT, TypeTuple> {
250 typedef typename tbb::flow::tuple<
263 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
264 struct wrap_key_tuple_elements<9, PT, KeyTraits, 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>
283 struct wrap_tuple_elements<10, PT, TypeTuple> {
284 typedef typename tbb::flow::tuple<
298 template<
template<
class>
class PT,
typename KeyTraits,
typename TypeTuple>
299 struct wrap_key_tuple_elements<10, PT, KeyTraits, 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>
345 for (
typename std::initializer_list<T>::const_iterator src = il.begin(); src != il.end(); ++src )
346 new (dst++) T( *src );
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>
463 template<
typename T,
size_t N>
468 typedef T ArrayType[N];
474 static const size_t space_size =
sizeof(ArrayType) /
sizeof(
char);
480 struct _unwind_class {
486 for(
size_t i = already_built; i > 0 ; --i ) space[i-1].~
value_type();
494 return reinterpret_cast<ArrayType &>(*vp);
504 for(
size_t i = 0; i < N; ++i ) {
506 ++(guard.already_built);
515 for(
size_t i = 0; i < N; ++i, ++dp, ++sp) {
517 ++(guard.already_built);
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 682 template<
typename T,
typename R>
685 #if __TBB_CONST_REF_TO_ARRAY_TEMPLATE_PARAM_BROKEN 686 template<
typename T,
typename R,
size_t N>
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>(); }
tbb::flow::tuple< PT< KeyTrait0 > > type
KeyTraits::hash_compare_type KHash
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 3, TypeTuple >::type > KeyTrait3
static const size_t value
bool 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 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
virtual void CopyTo(void *) const
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
T punned_cast(U *ptr)
Cast between unrelated pointer types.
tbb::flow::tuple_element< N-1, Tuple >::type T_i
tbb::flow::tuple< T0, T1, T2, T3, T4 > Tuple
_unwind_class(pointer_type p)
~initializer_list_wrapper()
const_iterator begin() const __TBB_NOEXCEPT(true)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
#define __TBB_NOEXCEPT(expression)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 3, TypeTuple >::type > KeyTrait3
static const size_t t2_align
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
static const size_t MaxSize
type_plus_align< T1, T2, remainder > type
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
type_plus_align< T1, T2, 0 > just_pair
Detects whether two given types are the same.
tagged_msg(T const &index, R const &value)
const U & variant_cast_to() const
_unwind_space(pointer_type p)
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 >, PT< KeyTrait3 > > type
static const size_t remainder
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
pick_tuple_max< N, Tuple, alignment_of >::type AlignType
void const char const char int ITT_FORMAT __itt_group_sync p
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 >, PT< KeyTrait3 >, PT< KeyTrait4 > > type
const T & const_reference
static const size_t MaxNBytes
initializer_list_wrapper(const initializer_list_wrapper< T > &ilw) __TBB_NOEXCEPT(true)
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 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
tbb::flow::tuple< PT< typename tbb::flow::tuple_element< 0, TypeTuple >::type > > type
pick_one<(Selector< T1 >::value > Selector< T2 >::value), T1, T2 >::type type
tbb::flow::tuple< PT< typename tbb::flow::tuple_element< 0, TypeTuple >::type >, PT< typename tbb::flow::tuple_element< 1, TypeTuple >::type > > type
const ArrayType & value() const
static const size_t t1_align
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
internal::type_to_key_function_body< T, K > TtoK
bool variant_is_default_constructed() const
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
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
KeyTraits::hash_compare_type KHash
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 2, TypeTuple >::type > KeyTrait2
Wrapper(const Wrapper &other)
tbb::flow::tuple_element< 0, Tuple >::type T_i
initializer_list_wrapper(std::initializer_list< T > il) __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 value
pick_tuple_max< N, Tuple, size_of >::type MaxSizeType
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
KeyTraits::hash_compare_type KHash
size_t size() const __TBB_NOEXCEPT(true)
const V & cast_to() const
tbb::aligned_space< AlignType, MaxNElements > SpaceType
static const size_t extra_bytes
const value_type & value() const
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 2, TypeTuple >::type > KeyTrait2
void CopyTo(void *newSpace) const __TBB_override
variant(const variant &other)
tbb::flow::tuple_element< N-1, Tuple >::type ThisType
static void construct(void *, const T &x)
initializer_list_wrapper(initializer_list_wrapper< T > &&ilw) __TBB_NOEXCEPT(true)
const V & cast_to(T const &t)
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 > > type
static const size_t MaxNElements
bool variant_is_a() const
pick_tuple_max< N-1, Tuple, Selector >::type LeftMaxType
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
static const size_t max_align
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
const_iterator end() const __TBB_NOEXCEPT(true)
tbb::flow::tuple_element< 0, Tuple >::type type
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 > > type
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 4, TypeTuple >::type > KeyTrait4
Wrapper(const ArrayType &other)
void operator=(const variant &rhs)
void set_tag(TagType const &index)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
pick_max< Selector, LeftMaxType, ThisType >::type type
KeyTraits::hash_compare_type KHash
static void construct(void *mySpace, const T &x)
void CopyTo(void *newSpace) const __TBB_override
KeyTraits::hash_compare_type KHash