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