17 #ifndef __TBB_flow_graph_streaming_H    18 #define __TBB_flow_graph_streaming_H    20 #ifndef __TBB_flow_graph_H    21 #error Do not #include this internal file directly; use public TBB headers instead.    24 #if __TBB_PREVIEW_STREAMING_NODE    30 template <
int N1, 
int N2>
    33     static const int size = N2 - N1 + 1;
    40 template <
int N1, 
int N2 = N1>
    52 template <
int N1, 
int N2>
    57 template <
int N1, 
int N2>
    62 template <
typename... Args>
    67 template <
typename T, 
typename... Rest>
    78 template<
typename Key>
    84 template<
typename Key>
    90 template<
typename Device, 
typename Key>
   103 template <
typename T>
   108 template <
int N1, 
int N2>
   113 template <
int N1, 
int N2>
   118 template <
typename T>
   123 template <
typename ...Args1>
   126 template <
typename A1, 
typename ...Args1>
   128     static const size_t my_delta = 1; 
   130     template <
typename F, 
typename Tuple, 
typename ...Args2>
   131     static void doit(F& f, Tuple& t, A1& a1, Args1&... args1, Args2&... args2) {
   134     template <
typename F, 
typename Tuple, 
typename ...Args2>
   138     template <
typename F, 
typename Tuple, 
int N1, 
int N2, 
typename ...Args2>
   141             args2..., std::get<N1 + my_delta>(t));
   143     template <
typename F, 
typename Tuple, 
int N, 
typename ...Args2>
   148     template <
typename F, 
typename Tuple, 
int N1, 
int N2, 
typename ...Args2>
   150         doit_impl(x, f, t, 
fn(), args1..., args2...);
   152     template <
typename F, 
typename Tuple, 
int N, 
typename ...Args2>
   154         doit_impl(x, f, t, 
fn(), args1..., args2...);
   160     template <
typename F, 
typename Tuple, 
typename ...Args2>
   161     static void doit(F& f, Tuple&, Args2&... args2) {
   167 template<
typename JP, 
typename StreamFactory, 
typename... Ports>
   170     template <
typename T>
   185 template<
typename StreamFactory, 
typename KernelInputTuple, 
typename = 
void>
   191     template <
typename ...Args>
   193         factory.send_kernel( device, kernel, args... );
   198 template<
typename StreamFactory, 
typename KernelInputTuple>
   207     struct range_wrapper {
   209         virtual range_wrapper *clone() 
const = 0;
   213     struct range_value : 
public range_wrapper {
   223             return new range_value(my_value);
   230     struct range_mapper : 
public range_wrapper {
   235             return get<N + 1>(ip).data(
false);
   239             return new range_mapper<N>;
   244     template <
typename ...Args>
   246         __TBB_ASSERT(my_range_wrapper, 
"Range is not set. Call set_range() before running streaming_node.");
   247         factory.send_kernel( device, kernel, my_range_wrapper->get_range(ip), args... );
   257         executor.my_range_wrapper = NULL;
   261         if (my_range_wrapper) 
delete my_range_wrapper;
   265         my_range_wrapper = 
new range_value(work_size);
   269         my_range_wrapper = 
new range_value(
std::move(work_size));
   274         my_range_wrapper = 
new range_mapper<N>;
   279         my_range_wrapper = 
new range_mapper<N>;
   301 template<
typename... Args>
   304 template<
typename... Ports, 
typename JP, 
typename StreamFactory>
   307     : 
public composite_node < typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::input_tuple,
   308                               typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::output_tuple >
   319     typedef composite_node<input_tuple, output_tuple> 
base_type;
   334         return std::tie( internal::input_port<S>( my_indexer_node )... );
   339         return std::tie( internal::output_port<S>( my_kernel_node )... );
   352         make_edge( internal::output_port<N>( my_device_selector_node ), internal::input_port<N>( my_join_node ) );
   358         make_edge( my_indexer_node, my_device_selector_node );
   359         make_edge( my_device_selector_node, my_join_node );
   361         make_edge( my_join_node, my_kernel_node );
   368     class device_selector_base {
   370         virtual void operator()( 
const indexer_node_output_type &v, 
typename device_selector_node::output_ports_type &op ) = 0;
   371         virtual device_selector_base *clone( 
streaming_node &n ) 
const = 0;
   375     template <
typename UserFunctor>
   380             , my_user_functor( uf ), my_node(n), my_factory( f )
   382             my_port_epoches.fill( 0 );
   386             (this->*my_dispatch_funcs[ v.tag() ])( my_port_epoches[ v.tag() ], v, op );
   388                 || my_port_epoches[v.tag()] == 0, 
"Epoch is changed when key matching is requested" );
   392             return new device_selector( my_user_functor, n, my_factory );
   395         typedef void(device_selector<UserFunctor>::*send_and_put_fn_type)(
size_t &, 
const indexer_node_output_type &, 
typename device_selector_node::output_ports_type &);
   404         template <
typename T>
   410         template <
typename T>
   413             return key_from_message<key_type>( t );
   418             typedef typename tuple_element<N + 1, typename device_selector_node::output_ports_type>::type::output_type elem_type;
   419             elem_type e = internal::cast_to<elem_type>( v );
   421             my_factory.send_data( device, e );
   422             get<N + 1>( op ).try_put( e );
   425         template< 
typename DevicePort >
   428             if ( it == my_devices.end() ) {
   430                 std::tie( it, std::ignore ) = my_devices.insert( std::make_pair( 
key, 
d ) );
   433                 my_node.notify_new_device( 
d );
   435             epoch_desc &e = it->second;
   437             if ( ++e.my_request_number == NUM_INPUTS ) my_devices.erase( it );
   455     class device_selector_body {
   460             (*my_device_selector)(v, op);
   473         virtual args_storage_base *clone() 
const = 0;
   478             : my_kernel( kernel ), my_factory( f )
   482             : 
tbb::
internal::no_copy(), my_kernel( k.my_kernel ), my_factory( k.my_factory )
   489     template <
typename... Args>
   490     class args_storage : 
public args_storage_base {
   496             const auto& t = get<N + 1>( ip );
   497             auto &port = get<N>( op );
   498             return port.try_put( t );
   510                 : my_kernel_func( ip, node, storage, get<0>(ip).device() ) {}
   514             template <
typename... FnArgs>
   526                     : my_ip( ip ), my_node( node ), my_storage( storage ), my_device( device )
   529                 template <
typename... FnArgs>
   531                     my_node.enqueue_kernel( my_ip, my_storage.my_factory, my_device, my_storage.my_kernel, args... );
   536         template<
typename FinalizeFn>
   540                 : my_ip( ip ), my_finalize_func( factory, get<0>(ip).device(), 
fn ) {}
   544             template <
typename... FnArgs>
   557                     : my_factory(factory), my_device(device), my_fn(
fn) {}
   559                 template <
typename... FnArgs>
   561                     my_factory.finalize( my_device, my_fn, args... );
   566         template<
typename FinalizeFn>
   568             return run_finalize_func<FinalizeFn>( ip, factory, 
fn );
   574                 : my_factory(factory), my_device( 
d ) {}
   576             template <
typename... FnArgs>
   578                 my_factory.send_data( my_device, args... );
   587             : args_storage_base( kernel, f )
   588             , my_args_pack( std::forward<Args>(args)... )
   591         args_storage( 
const args_storage &k ) : args_storage_base( k ), my_args_pack( k.my_args_pack ) {}
   593         args_storage( 
const args_storage_base &k, Args&&... args ) : args_storage_base( k ), my_args_pack( std::forward<Args>(args)... ) {}
   604                 graph& g = n.my_graph;
   606                 g.increment_wait_count();
   612                     g.decrement_wait_count();
   613                 }), const_args_pack );
   625             return new args_storage<Args...>( *this );
   639             __TBB_ASSERT( (my_node.my_args_storage != NULL), 
"No arguments storage" );
   641             my_node.my_args_storage->enqueue( ip, op, my_node );
   648     struct wrap_to_async {
   652     template <
typename T>
   657     template <
typename... Args>
   660         return new args_storage<Args...>(storage, std::forward<Args>(args)...);
   664         my_args_storage->send( 
d );
   667     template <
typename ...Args>
   673     template <
typename DeviceSelector>
   676         , my_indexer_node( g )
   677         , my_device_selector( new device_selector<DeviceSelector>( 
d, *this, f ) )
   678         , my_device_selector_node( g, 
serial, device_selector_body( my_device_selector ) )
   680         , my_kernel_node( g, 
serial, kernel_body( *this ) )
   682         , my_args_storage( make_args_storage( args_storage<>(kernel, f), 
port_ref<0, NUM_INPUTS - 1>() ) )
   684         base_type::set_external_ports( get_input_ports(), get_output_ports() );
   690         , my_indexer_node( node.my_indexer_node )
   691         , my_device_selector( node.my_device_selector->clone( *this ) )
   692         , my_device_selector_node( node.my_graph, 
serial, device_selector_body( my_device_selector ) )
   693         , my_join_node( node.my_join_node )
   694         , my_kernel_node( node.my_graph, 
serial, kernel_body( *this ) )
   695         , my_args_storage( node.my_args_storage->clone() )
   697         base_type::set_external_ports( get_input_ports(), get_output_ports() );
   703         , my_indexer_node( std::
move( node.my_indexer_node ) )
   704         , my_device_selector( node.my_device_selector->clone(*this) )
   705         , my_device_selector_node( node.my_graph, 
serial, device_selector_body( my_device_selector ) )
   706         , my_join_node( std::
move( node.my_join_node ) )
   707         , my_kernel_node( node.my_graph, 
serial, kernel_body( *this ) )
   708         , my_args_storage( node.my_args_storage )
   710         base_type::set_external_ports( get_input_ports(), get_output_ports() );
   713         node.my_args_storage = NULL;
   717         if ( my_args_storage ) 
delete my_args_storage;
   718         if ( my_device_selector ) 
delete my_device_selector;
   721     template <
typename... Args>
   724         args_storage_base * 
const new_args_storage = make_args_storage( *my_args_storage, 
typename wrap_to_async<Args>::type(std::forward<Args>(args))...);
   725         delete my_args_storage;
   726         my_args_storage = new_args_storage;
   742 #endif // __TBB_PREVIEW_STREAMING_NODE   743 #endif // __TBB_flow_graph_streaming_H args_storage_base * make_args_storage(const args_storage_base &storage, Args &&... args) const
 
static void doit_impl(std::false_type, F &f, Tuple &t, A1 &a1, Args1 &... args1, Args2 &... args2)
 
KernelInputTuple kernel_input_tuple
 
void operator()(FnArgs &... args)
 
void set_range(const range_type &work_size)
 
tuple< typename async_msg_type< Ports >::type... > input_tuple
 
void set_range(port_ref_impl< N, N >(*)())
 
bool_constant< true > true_type
 
args_storage_base::output_ports_type output_ports_type
 
kernel_multifunction_node my_kernel_node
 
streaming_node(graph &g, const kernel_type &kernel, DeviceSelector d, StreamFactory &f)
 
internal::make_sequence< NUM_OUTPUTS >::type output_sequence
 
void set_range(port_ref_impl< N, N >)
 
internal::streaming_node_traits< JP, StreamFactory, Ports... >::input_tuple input_tuple
 
streaming_device_with_key()
 
void call(F &&f, Pack &&p)
Calls the given function with arguments taken from a stored_pack.
 
void enqueue_kernel_impl(kernel_input_tuple &, StreamFactory &factory, device_type device, const kernel_type &kernel, Args &... args) const
 
static run_finalize_func< FinalizeFn > make_run_finalize_func(kernel_input_tuple &ip, StreamFactory &factory, FinalizeFn fn)
 
range_wrapper * clone() const __TBB_override
 
static void doit(F &f, Tuple &t, A1 &a1, Args1 &... args1, Args2 &... args2)
 
kernel_executor_helper(const kernel_executor_helper &executor)
 
const kernel_type my_kernel
 
const streaming_node & my_node
 
run_finalize_func(kernel_input_tuple &ip, StreamFactory &factory, FinalizeFn fn)
 
internal::streaming_node_traits< JP, StreamFactory, Ports... >::kernel_input_tuple kernel_input_tuple
 
streaming_device_with_key(const Device &d, Key k)
 
is_port_ref_impl< typename tbb::internal::strip< T >::type >::type type
 
void notify_new_device(device_type d)
 
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 d __itt_event ITT_FORMAT __itt_group_mark d void const wchar_t const wchar_t int ITT_FORMAT __itt_group_sync __itt_group_fsync x void const wchar_t int const wchar_t int int ITT_FORMAT __itt_group_sync __itt_group_fsync x void ITT_FORMAT __itt_group_sync __itt_group_fsync p void ITT_FORMAT __itt_group_sync __itt_group_fsync p void size_t ITT_FORMAT lu no args __itt_obj_prop_t __itt_obj_state_t ITT_FORMAT d const char ITT_FORMAT s const char ITT_FORMAT s __itt_frame ITT_FORMAT p __itt_counter ITT_FORMAT p __itt_counter unsigned long long ITT_FORMAT lu __itt_counter unsigned long long ITT_FORMAT lu __itt_counter __itt_clock_domain unsigned long long void ITT_FORMAT p const wchar_t ITT_FORMAT S __itt_mark_type const wchar_t ITT_FORMAT S __itt_mark_type const char ITT_FORMAT s __itt_mark_type ITT_FORMAT d __itt_caller ITT_FORMAT p __itt_caller ITT_FORMAT p no args const __itt_domain __itt_clock_domain unsigned long long __itt_id ITT_FORMAT lu const __itt_domain __itt_clock_domain unsigned long long __itt_id __itt_id void * fn
 
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
 
key_type get_key(std::false_type, const T &, size_t &epoch)
 
kernel_func(kernel_input_tuple &ip, const streaming_node &node, const args_storage &storage, device_type device)
 
composite_node< input_tuple, output_tuple > base_type
 
std::unordered_map< typename std::decay< key_type >::type, epoch_desc > my_devices
 
key_type get_key(std::true_type, const T &t, size_t &)
 
device_selector_base * my_device_selector
 
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 * key
 
streaming_node(streaming_node &&node)
 
static dispatch_funcs_type create_dispatch_funcs(internal::sequence< S... >)
 
StreamFactory::kernel_type kernel_type
 
static void doit_impl(std::true_type x, F &f, Tuple &t, port_ref_impl< N1, N2 >(*fn)(), Args1 &... args1, Args2 &... args2)
 
static void doit_impl(std::true_type x, F &f, Tuple &t, port_ref_impl< N, N >(*fn)(), Args1 &... args1, Args2 &... args2)
 
StreamFactory::device_type device_type
 
device_selector_base * clone(streaming_node &n) const __TBB_override
 
Base class for types that should not be assigned.
 
void ignore_return_values(Args &&...)
 
void send(device_type d) __TBB_override
 
class __TBB_DEPRECATED streaming_node
 
std::false_type is_key_matching
 
internal::key_from_policy< JP >::type key_type
 
std::array< send_and_put_fn_type, NUM_INPUTS > dispatch_funcs_type
 
base_type::input_ports_type get_input_ports()
 
void reset_node(reset_flags=rf_reset_protocol) __TBB_override
 
kernel_input_tuple & my_ip
 
tuple< streaming_device_with_key< typename StreamFactory::device_type, typename key_from_policy< JP >::type >, typename async_msg_type< Ports >::type... > kernel_input_tuple
 
bool_constant< false > false_type
 
kernel_multifunction_node::output_ports_type output_ports_type
 
base_type::output_ports_type get_output_ports()
 
StreamFactory::template async_msg_type< typename tbb::internal::strip< T >::type > type
 
args_storage_base * my_args_storage
 
void operator()(FnArgs &... args)
 
StreamFactory::range_type range_type
 
range_wrapper * clone() const __TBB_override
 
void send_and_put_impl(size_t &epoch, const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op)
 
send_func(StreamFactory &factory, device_type d)
 
static void doit_impl(std::true_type, F &f, Tuple &t, port_ref_impl< N, N >, Args1 &... args1, Args2 &... args2)
 
#define __TBB_STATIC_ASSERT(condition, msg)
 
std::true_type is_key_matching
 
internal::streaming_device_with_key< device_type, key_type > device_with_key_type
 
void set_args(Args &&... args)
 
void operator()(FnArgs &... args)
 
void operator()(kernel_input_tuple ip, typename args_storage_base::output_ports_type &op)
 
device_selector_node my_device_selector_node
 
args_pack_type my_args_pack
 
__TBB_DEPRECATED internal::port_ref_impl< N1, N2 > port_ref()
 
~kernel_executor_helper()
 
task * do_try_put(const T &v, void *p)
 
void set_range(range_type &&work_size)
 
args_storage(const args_storage &k)
 
base_type::output_ports_type get_output_ports(internal::sequence< S... >)
 
std::array< size_t, NUM_INPUTS > my_port_epoches
 
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
 
StreamFactory::kernel_type kernel_type
 
void operator()(FnArgs &... args)
 
StreamFactory::device_type device_type
 
range_value(const range_type &value)
 
StreamFactory & my_factory
 
range_wrapper * my_range_wrapper
 
virtual ~args_storage_base()
 
std::decay< Key >::type my_key
 
indexer_node_type::output_type indexer_node_output_type
 
void enqueue_kernel(kernel_input_tuple &ip, StreamFactory &factory, device_type device, const kernel_type &kernel, Args &... args) const
 
internal::make_sequence< NUM_INPUTS >::type input_sequence
 
StreamFactory::template async_msg_type< T > type
 
#define __TBB_ASSERT_EX(predicate, comment)
"Extended" version is useful to suppress warnings if a variable is only used with an assert
 
streaming_node(const streaming_node &node)
 
kernel_input_tuple & my_ip
 
const Device & device() const
 
void operator()(const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op) __TBB_override
 
void operator()(const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op)
 
Base class for types that should not be copied or assigned.
 
virtual ~device_selector_base()
 
indexer_node_type my_indexer_node
 
StreamFactory & my_factory
 
dispatch_funcs_type my_dispatch_funcs
 
internal::streaming_node_traits< JP, StreamFactory, Ports... >::indexer_node_type indexer_node_type
 
StreamFactory & my_factory
 
device_type get_device(key_type key, DevicePort &dp)
 
static void doit(F &f, Tuple &, Args2 &... args2)
 
args_storage_base(const args_storage_base &k)
 
device_selector_body(device_selector_base *d)
 
void operator()(FnArgs &... args)
 
args_storage(const args_storage_base &k, Args &&... args)
 
UserFunctor my_user_functor
 
StreamFactory::kernel_type kernel_type
 
args_storage_base(const kernel_type &kernel, StreamFactory &f)
 
Detects whether two given types are the same.
 
range_value(range_type &&value)
 
void make_edge(sender< T > &p, receiver< T > &s)
Makes an edge between a single predecessor and a single successor.
 
void make_edges(internal::sequence< S... >)
 
StreamFactory & my_factory
 
run_kernel_func(kernel_input_tuple &ip, const streaming_node &node, const args_storage &storage)
 
bool do_try_put(const kernel_input_tuple &ip, output_ports_type &op, internal::sequence< S... >) const
 
range_type get_range(const kernel_input_tuple &) const __TBB_override
 
finalize_func(StreamFactory &factory, device_type device, FinalizeFn fn)
 
field of type K being used for matching.
 
void enqueue(kernel_input_tuple &ip, output_ports_type &op, const streaming_node &n) __TBB_override
 
kernel_body(const streaming_node &node)
 
bool do_try_put(const kernel_input_tuple &ip, output_ports_type &op) const
 
multifunction_node< kernel_input_tuple, output_tuple > kernel_multifunction_node
 
device_selector_base * my_device_selector
 
multifunction_node< indexer_node_output_type, kernel_input_tuple > device_selector_node
 
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
 
device_selector(UserFunctor uf, streaming_node &n, StreamFactory &f)
 
tbb::internal::stored_pack< Args... > args_pack_type
 
static void doit_impl(std::true_type x, F &f, Tuple &t, port_ref_impl< N1, N2 >, Args1 &... args1, Args2 &... args2)
 
join_node< kernel_input_tuple, JP > my_join_node
 
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
 
args_storage_base * clone() const __TBB_override
 
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
 
const args_storage & my_storage
 
args_storage(const kernel_type &kernel, StreamFactory &f, Args &&... args)
 
epoch_desc(device_type d)
 
StreamFactory::device_type device_type
 
KernelInputTuple kernel_input_tuple
 
const streaming_node & my_node
 
internal::streaming_node_traits< JP, StreamFactory, Ports... >::output_tuple output_tuple
 
void enqueue_kernel_impl(kernel_input_tuple &ip, StreamFactory &factory, device_type device, const kernel_type &kernel, Args &... args) const
 
std::true_type is_key_matching
 
indexer_node< typename async_msg_type< Ports >::type... > indexer_node_type
 
kernel_executor_helper(kernel_executor_helper &&executor)
 
range_type get_range(const kernel_input_tuple &ip) const __TBB_override
 
K key_from_message(const T &t)
 
T or_return_values(T &&t)
 
base_type::input_ports_type get_input_ports(internal::sequence< S... >)
 
void move(tbb_thread &t1, tbb_thread &t2)