17 #ifndef __TBB__flow_graph_body_impl_H    18 #define __TBB__flow_graph_body_impl_H    22 #ifndef __TBB_flow_graph_H    23 #error Do not #include this internal file directly; use public TBB headers instead.    34 #if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT    36 template<
typename ... Policies> 
struct Policy {};
    40 template<
typename ExpectedPolicy, 
typename FirstPolicy, 
typename ...Policies>
    41 struct has_policy<ExpectedPolicy, FirstPolicy, Policies...> :
    43                                  has_policy<ExpectedPolicy, Policies...>::value> {};
    45 template<
typename ExpectedPolicy, 
typename SinglePolicy>
    49 template<
typename ExpectedPolicy, 
typename ...Policies>
    54 template<
typename P1, 
typename P2 = 
void> 
struct Policy {};
    56 template<
typename ExpectedPolicy, 
typename SinglePolicy>
    59 template<
typename ExpectedPolicy, 
typename P>
    60 struct has_policy<ExpectedPolicy, Policy<P> > : has_policy<ExpectedPolicy, P> {};
    62 template<
typename ExpectedPolicy, 
typename P1, 
typename P2>
    63 struct has_policy<ExpectedPolicy, Policy<P1, P2> > :
    68 namespace graph_policy_namespace {
    96 template< 
typename Output >
   101 #if TBB_DEPRECATED_INPUT_NODE_BODY   104     virtual Output 
operator()(flow_control& fc) = 0;
   109 template <
typename Body>
   112         "TBB Warning: input_node body requirements have been changed."   113         "To temporarily enforce deprecated API specify TBB_DEPRECATED_INPUT_NODE_BODY.");
   116 template <
typename Body>
   121 template <
typename ReturnType, 
typename T>
   124         "TBB Warning: input_node body requirements have been changed."   125         "To temporarily enforce deprecated API specify TBB_DEPRECATED_INPUT_NODE_BODY.");
   129 template< 
typename Output, 
typename Body>
   134 #if TBB_DEPRECATED_INPUT_NODE_BODY   150 template< 
typename Output >
   159 template< 
typename Output, 
typename Body>
   176 template< 
typename Input, 
typename Output >
   180     virtual Output 
operator()(
const Input &input) = 0;
   185 template <
typename Input, 
typename Output, 
typename B>
   199 template <
typename B>
   216 template <
typename Input, 
typename B>
   222         return continue_msg();
   233 template <
typename Output, 
typename B>
   249 template<
typename Input, 
typename OutputSet>
   253     virtual void operator()(
const Input &, OutputSet &) = 0;
   259 template<
typename Input, 
typename OutputSet, 
typename B >
   277 template<
typename Input, 
typename Output>
   281         virtual Output 
operator()(
const Input &input) = 0;  
   286 template<
typename Input, 
typename Output>
   290         virtual const Output & operator()(
const Input &input) = 0;  
   294 template <
typename Input, 
typename Output, 
typename B>
   307 template <
typename Input, 
typename Output, 
typename B>
   327 template< 
typename NodeType >
   337     ) : graph_task(node_priority),
   352 template< 
typename NodeType, 
typename Input >
   363     ) : graph_task(node_priority),
   377 template< 
typename NodeType >
   396 template< 
typename Input, 
typename Output >
   398     Output 
operator()( 
const Input & )
 const { 
return Output(); }
   401 template<
typename T, 
typename DecrementType, 
typename DummyType = 
void>
   404 template<
typename T, 
typename DecrementType>
   406                   typename 
tbb::internal::enable_if<
   407                       tbb::internal::is_integral<DecrementType>::value, void>
::type   413         task* result = my_node->decrement_counter( 
value );
   420         return my_node->my_graph;
   425 #if TBB_DEPRECATED_FLOW_NODE_EXTRACTION   427             my_built_predecessors.clear();
   440 #if TBB_DEPRECATED_FLOW_NODE_EXTRACTION   445     typedef internal::edge_container<predecessor_type> built_predecessors_type;
   446     typedef typename built_predecessors_type::edge_list_type predecessor_list_type;
   447     built_predecessors_type &built_predecessors() 
__TBB_override { 
return my_built_predecessors; }
   451         my_built_predecessors.add_edge( 
s );
   456         my_built_predecessors.delete_edge(
s);
   459     void copy_predecessors( predecessor_list_type &v) 
__TBB_override {
   461         my_built_predecessors.copy_edges(v);
   466         return my_built_predecessors.edge_count();
   469     built_predecessors_type my_built_predecessors;
   479         return my_node->decrement_counter( 1 );
   485         return my_node->my_graph;
   506 #endif // __TBB__flow_graph_body_impl_H task * execute() __TBB_override
 
The leaf for source_body.
 
graph & graph_reference() const __TBB_override
 
interface11::internal::Policy< queueing, lightweight > queueing_lightweight
 
task * execute() __TBB_override
 
the leaf for function_body
 
virtual ~type_to_key_function_body()
 
virtual void operator()(const Input &, OutputSet &)=0
 
receiver< input_type >::predecessor_type predecessor_type
 
const Output & operator()(const Input &i) __TBB_override
 
continue_msg operator()(const Input &i) __TBB_override
 
leaf for multifunction. OutputSet can be a std::tuple or a vector.
 
task * execute() __TBB_override
 
type_to_key_function_body_leaf(const B &_body)
 
void * get_body_ptr() __TBB_override
 
the leaf for function_body specialized for Output of continue_msg
 
multifunction_body_leaf * clone() __TBB_override
 
function_body_leaf(const B &_body)
 
source_task_bypass(NodeType &n)
 
virtual source_body * clone()=0
 
Base class for types that should not be assigned.
 
virtual function_body * clone()=0
 
virtual ~type_to_key_function_body()
 
A task that calls a node's forward_task function.
 
Output operator()(const continue_msg &i) __TBB_override
 
graph & graph_reference() const __TBB_override
 
void operator()(const Input &input, OutputSet &oset) __TBB_override
 
virtual multifunction_body * clone()=0
 
unsigned int node_priority_t
 
virtual input_body * clone()=0
 
input_body_leaf * clone() __TBB_override
 
function_body_leaf * clone() __TBB_override
 
virtual type_to_key_function_body * clone()=0
 
void suppress_unused_warning(const T1 &)
Utility template function to prevent "unused" warnings by various compilers.
 
tbb::internal::uint64_t tag_value
 
A task that calls a node's apply_body_bypass function with no input.
 
interface11::internal::Policy< rejecting, lightweight > rejecting_lightweight
 
#define __TBB_STATIC_ASSERT(condition, msg)
 
apply_body_task_bypass(NodeType &n, const Input &i)
 
virtual Output operator()(flow_control &fc)=0
 
Output operator()(const Input &i) __TBB_override
 
type_to_key_function_body_leaf(const B &_body)
 
Forwards messages only if the threshold has not been reached.
 
A functor that takes no input and generates a value of type Output.
 
function_body that takes an Input and a set of output ports
 
bool operator()(Output &output) __TBB_override
 
#define __TBB_FLOW_GRAPH_PRIORITY_ARG1(arg1, priority)
 
source_body_leaf * clone() __TBB_override
 
multifunction_body_leaf(const B &_body)
 
the leaf for function_body specialized for Input and output of continue_msg
 
type_to_key_function_body_leaf * clone() __TBB_override
 
function_body_leaf * clone() __TBB_override
 
void check_input_node_body_input_type_impl(Body)
 
function_body_leaf(const B &_body)
 
virtual Output operator()(const Input &input)=0
 
static const node_priority_t no_priority
 
static tbb::task *const SUCCESSFULLY_ENQUEUED
 
the leaf for function_body specialized for Input of continue_msg
 
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 * task
 
forward_task_bypass(NodeType &n)
 
task * try_put_task(const DecrementType &value) __TBB_override
Put item to successor; return task to run the successor if possible.
 
input_body_leaf(const Body &_body)
 
virtual ~multifunction_body()
 
continue_msg operator()(const continue_msg &i) __TBB_override
 
Base class for types that should not be copied or assigned.
 
key_matching< tag_value > tag_matching
 
A task that calls a node's apply_body_bypass function, passing in an input of type Input.
 
strip< K >::type base_key_type
 
Detects whether two given types are the same.
 
void const char const char int ITT_FORMAT __itt_group_sync s
 
Output operator()(const Input &) const
 
void check_input_node_body_input_type(Body)
 
field of type K being used for matching.
 
untyped_sender predecessor_type
The predecessor type for this node.
 
An empty functor that takes an Input and returns a default constructed Output.
 
#define __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES
 
Strips its template type argument from cv- and ref-qualifiers.
 
void reset_receiver(reset_flags f) __TBB_override
 
Output operator()(const Input &i) __TBB_override
 
A functor that takes an Input and generates an Output.
 
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
 
Output operator()(flow_control &fc) __TBB_override
 
function_body_leaf * clone() __TBB_override
 
source_body_leaf(const Body &_body)
 
function_body_leaf(const B &_body)
 
type_to_key_function_body_leaf * clone() __TBB_override
 
decrementer(int number_of_predecessors=0)
 
virtual void * get_body_ptr()=0
 
virtual Output operator()(const Input &input)=0
 
task * execute() __TBB_override
 
function_body_leaf * clone() __TBB_override
 
virtual bool operator()(Output &output)=0
 
function_body_leaf(const B &_body)