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>(); }
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
_unwind_space(pointer_type p)
pick_tuple_max< N-1, Tuple, Selector >::type LeftMaxType
_unwind_class(pointer_type p)
static void construct(void *, const T &x)
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 > > type
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 2, TypeTuple >::type > KeyTrait2
const V & cast_to() const
static const size_t MaxSize
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 3, TypeTuple >::type > KeyTrait3
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 2, TypeTuple >::type > KeyTrait2
tbb::flow::tuple< PT< KeyTrait0 > > type
static const size_t t1_align
void throw_exception(exception_id eid)
Versionless convenience wrapper for throw_exception_v4()
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
static const size_t MaxNElements
const U & variant_cast_to() const
const_iterator begin() const __TBB_NOEXCEPT(true)
size_t size() const __TBB_NOEXCEPT(true)
type_plus_align< T1, T2, remainder > type
pick_tuple_max< N, Tuple, alignment_of >::type AlignType
KeyTraits::hash_compare_type KHash
tbb::flow::tuple< PT< typename tbb::flow::tuple_element< 0, TypeTuple >::type > > type
const ArrayType & value() const
Wrapper(const Wrapper &other)
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 > > type
pick_one<(Selector< T1 >::value > Selector< T2 >::value), T1, T2 >::type type
static const size_t max_align
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
tbb::flow::tuple_element< 0, Tuple >::type type
const value_type & value() const
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
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
Wrapper(const Wrapper &other)
@ eid_bad_tagged_msg_cast
initializer_list_wrapper(std::initializer_list< T > il) __TBB_NOEXCEPT(true)
const typedef T * const_iterator
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
tbb::aligned_space< AlignType, MaxNElements > SpaceType
void operator=(const variant &rhs)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
static const size_t MaxNBytes
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 4, TypeTuple >::type > KeyTrait4
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 mimicking std::pair but with trailing fill to ensure each element of an array
const_iterator end() const __TBB_NOEXCEPT(true)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 2, TypeTuple >::type > KeyTrait2
const typedef T & const_reference
tbb::flow::tuple< T0, T1, T2, T3, T4 > Tuple
virtual void CopyTo(void *) const
Wrapper(const ArrayType &other)
static const size_t extra_bytes
initializer_list_wrapper(const initializer_list_wrapper< T > &ilw) __TBB_NOEXCEPT(true)
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 >, PT< KeyTrait3 > > type
KeyTraits::hash_compare_type KHash
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 3, TypeTuple >::type > KeyTrait3
tbb::flow::tuple_element< N-1, Tuple >::type T_i
tbb::flow::tuple_element< N-1, Tuple >::type ThisType
KeyTraits::hash_compare_type KHash
void CopyTo(void *newSpace) const __TBB_override
T punned_cast(U *ptr)
Cast between unrelated pointer types.
#define __TBB_NOEXCEPT(expression)
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 > > 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
Detects whether two given types are the same.
static void construct(void *mySpace, const T &x)
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
bool variant_is_a() const
tbb::flow::tuple< PT< KeyTrait0 >, PT< KeyTrait1 >, PT< KeyTrait2 >, PT< KeyTrait3 >, PT< KeyTrait4 > > type
void const char const char int ITT_FORMAT __itt_group_sync p
void set_tag(TagType const &index)
static const size_t t2_align
bool variant_is_default_constructed() const
~initializer_list_wrapper()
const V & cast_to(T const &t)
pick_max< Selector, LeftMaxType, ThisType >::type type
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 1, TypeTuple >::type > KeyTrait1
static const size_t remainder
void CopyTo(void *newSpace) const __TBB_override
initializer_list_wrapper(initializer_list_wrapper< T > &&ilw) __TBB_NOEXCEPT(true)
static const size_t 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 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
type_plus_align< T1, T2, 0 > just_pair
bool is_default_constructed() const
const typedef T & reference
tagged_msg(T const &index, R const &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
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
internal::type_to_key_function_body< T, K > TtoK
pick_tuple_max< N, Tuple, size_of >::type MaxSizeType
tbb::flow::tuple_element< 0, Tuple >::type T_i
variant(const variant &other)
KeyTrait< K, KHash, typename tbb::flow::tuple_element< 0, TypeTuple >::type > KeyTrait0
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.