Intel(R) Threading Building Blocks Doxygen Documentation
version 4.2.3
|
Go to the documentation of this file.
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>(); }
initializer_list_wrapper(const initializer_list_wrapper< T > &ilw) __TBB_NOEXCEPT(true)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
_unwind_class(pointer_type p)
variant(const variant &other)
const U & variant_cast_to() const
tbb::flow::tuple< T0, T1, T2, T3, T4 > Tuple
pick_tuple_max< N-1, Tuple, Selector >::type LeftMaxType
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()
const_iterator end() const __TBB_NOEXCEPT(true)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 2, TypeTuple >::type > KeyTrait2
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 4, TypeTuple >::type > KeyTrait4
Detects whether two given types are the same.
type mimicking std::pair but with trailing fill to ensure each element of an array
static const size_t t2_align
bool variant_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 > > type
~initializer_list_wrapper()
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
static const size_t MaxNElements
void CopyTo(void *newSpace) const __TBB_override
static const size_t extra_bytes
bool is_default_constructed() const
pick_tuple_max< N, Tuple, alignment_of >::type AlignType
tbb::flow::tuple< PT< KeyTrait0 > > type
pick_tuple_max< N, Tuple, size_of >::type MaxSizeType
tbb::flow::tuple_element< 0, Tuple >::type T_i
tbb::flow::tuple_element< N-1, Tuple >::type ThisType
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
static const size_t MaxNBytes
KeyTraits::hash_compare_type KHash
static void construct(void *, const T &x)
@ eid_bad_tagged_msg_cast
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 2, TypeTuple >::type > KeyTrait2
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 2, TypeTuple >::type > KeyTrait2
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 3, TypeTuple >::type > KeyTrait3
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
static const size_t remainder
initializer_list_wrapper(initializer_list_wrapper< T > &&ilw) __TBB_NOEXCEPT(true)
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
type_plus_align< T1, T2, 0 > just_pair
const typedef T & reference
KeyTraits::hash_compare_type KHash
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 >, PT< KeyTrait3 >, PT< KeyTrait4 > > type
tagged_msg(T const &index, R const &value)
tbb::aligned_space< AlignType, MaxNElements > SpaceType
void operator=(const variant &rhs)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
internal::type_to_key_function_body< T, K > TtoK
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
Wrapper(const Wrapper &other)
const V & cast_to() const
void set_tag(TagType const &index)
virtual void CopyTo(void *) const
const value_type & value() const
tbb::flow::tuple_element< 0, Tuple >::type type
static const size_t max_align
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 > > type
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
static void construct(void *mySpace, const T &x)
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 > > type
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 >, PT< KeyTrait3 > > type
static const size_t MaxSize
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 3, TypeTuple >::type > KeyTrait3
T punned_cast(U *ptr)
Cast between unrelated pointer types.
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
#define __TBB_NOEXCEPT(expression)
static const size_t t1_align
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 >, 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
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
Wrapper(const Wrapper &other)
tbb::flow::tuple_element< N-1, Tuple >::type T_i
const_iterator begin() const __TBB_NOEXCEPT(true)
size_t size() const __TBB_NOEXCEPT(true)
KeyTraits::hash_compare_type KHash
initializer_list_wrapper(std::initializer_list< T > il) __TBB_NOEXCEPT(true)
type_plus_align< T1, T2, remainder > type
const typedef T * const_iterator
static const size_t value
void const char const char int ITT_FORMAT __itt_group_sync p
void CopyTo(void *newSpace) const __TBB_override
const V & cast_to(T const &t)
KeyTraits::hash_compare_type KHash
tbb::flow::tuple< PT< typename tbb::flow::tuple_element< 0, TypeTuple >::type > > 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_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
bool variant_is_a() const
const ArrayType & value() const
const typedef T & const_reference
_unwind_space(pointer_type p)
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
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
pick_one<(Selector< T1 >::value > Selector< T2 >::value), T1, T2 >::type type
Wrapper(const ArrayType &other)
Copyright © 2005-2020 Intel Corporation. All Rights Reserved.
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
subsidiaries in the United States and other countries.
* Other names and brands may be claimed as the property of others.