_flow_graph_indexer_impl.h
Go to the documentation of this file.
/*
Copyright (c) 2005-2020 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#ifndef __TBB__flow_graph_indexer_impl_H
#define __TBB__flow_graph_indexer_impl_H
#ifndef __TBB_flow_graph_H
#error Do not #include this internal file directly; use public TBB headers instead.
#endif
#include "_flow_graph_types_impl.h"
namespace internal {
// Output of the indexer_node is a tbb::flow::tagged_msg, and will be of
// the form tagged_msg<tag, result>
// where the value of tag will indicate which result was put to the
// successor.
template<typename IndexerNodeBaseType, typename T, size_t K>
task* do_try_put(const T &v, void *p) {
typename IndexerNodeBaseType::output_type o(K, v);
return reinterpret_cast<IndexerNodeBaseType *>(p)->try_put_task(&o);
}
template<typename TupleTypes,int N>
struct indexer_helper {
template<typename IndexerNodeBaseType, typename PortTuple>
static inline void set_indexer_node_pointer(PortTuple &my_input, IndexerNodeBaseType *p, graph& g) {
typedef typename tuple_element<N-1, TupleTypes>::type T;
task *(*indexer_node_put_task)(const T&, void *) = do_try_put<IndexerNodeBaseType, T, N-1>;
tbb::flow::get<N-1>(my_input).set_up(p, indexer_node_put_task, g);
indexer_helper<TupleTypes,N-1>::template set_indexer_node_pointer<IndexerNodeBaseType,PortTuple>(my_input, p, g);
}
template<typename InputTuple>
static inline void reset_inputs(InputTuple &my_input, reset_flags f) {
indexer_helper<TupleTypes,N-1>::reset_inputs(my_input, f);
tbb::flow::get<N-1>(my_input).reset_receiver(f);
}
#if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
template<typename InputTuple>
static inline void extract(InputTuple &my_input) {
indexer_helper<TupleTypes,N-1>::extract(my_input);
tbb::flow::get<N-1>(my_input).extract_receiver();
}
#endif
};
template<typename TupleTypes>
struct indexer_helper<TupleTypes,1> {
template<typename IndexerNodeBaseType, typename PortTuple>
static inline void set_indexer_node_pointer(PortTuple &my_input, IndexerNodeBaseType *p, graph& g) {
typedef typename tuple_element<0, TupleTypes>::type T;
task *(*indexer_node_put_task)(const T&, void *) = do_try_put<IndexerNodeBaseType, T, 0>;
tbb::flow::get<0>(my_input).set_up(p, indexer_node_put_task, g);
}
template<typename InputTuple>
static inline void reset_inputs(InputTuple &my_input, reset_flags f) {
tbb::flow::get<0>(my_input).reset_receiver(f);
}
#if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
template<typename InputTuple>
static inline void extract(InputTuple &my_input) {
tbb::flow::get<0>(my_input).extract_receiver();
}
#endif
};
template<typename T>
class indexer_input_port : public receiver<T> {
private:
void* my_indexer_ptr;
typedef task* (* forward_function_ptr)(T const &, void* );
forward_function_ptr my_try_put_task;
#if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
spin_mutex my_pred_mutex;
typedef typename receiver<T>::built_predecessors_type built_predecessors_type;
built_predecessors_type my_built_predecessors;
#endif /* TBB_DEPRECATED_FLOW_NODE_EXTRACTION */
graph* my_graph;
public:
#if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
indexer_input_port() : my_pred_mutex(), my_graph(NULL) {}
indexer_input_port( const indexer_input_port & other) : receiver<T>(), my_pred_mutex(), my_graph(other.my_graph) {
}
#endif /* TBB_DEPRECATED_FLOW_NODE_EXTRACTION */
void set_up(void* p, forward_function_ptr f, graph& g) {
my_indexer_ptr = p;
my_try_put_task = f;
my_graph = &g;
}
#if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
typedef typename receiver<T>::predecessor_list_type predecessor_list_type;
typedef typename receiver<T>::predecessor_type predecessor_type;
built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }
size_t predecessor_count() __TBB_override {
spin_mutex::scoped_lock l(my_pred_mutex);
return my_built_predecessors.edge_count();
}
void internal_add_built_predecessor(predecessor_type &p) __TBB_override {
spin_mutex::scoped_lock l(my_pred_mutex);
my_built_predecessors.add_edge(p);
}
void internal_delete_built_predecessor(predecessor_type &p) __TBB_override {
spin_mutex::scoped_lock l(my_pred_mutex);
my_built_predecessors.delete_edge(p);
}
void copy_predecessors( predecessor_list_type &v) __TBB_override {
spin_mutex::scoped_lock l(my_pred_mutex);
my_built_predecessors.copy_edges(v);
}
#endif /* TBB_DEPRECATED_FLOW_NODE_EXTRACTION */
protected:
template< typename R, typename B > friend class run_and_put_task;
template<typename X, typename Y> friend class internal::broadcast_cache;
template<typename X, typename Y> friend class internal::round_robin_cache;
task *try_put_task(const T &v) __TBB_override {
return my_try_put_task(v, my_indexer_ptr);
}
graph& graph_reference() const __TBB_override {
return *my_graph;
}
public:
#if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
void reset_receiver(reset_flags f) __TBB_override { if(f&rf_clear_edges) my_built_predecessors.clear(); }
#else
void reset_receiver(reset_flags /*f*/) __TBB_override { }
#endif
#if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
void extract_receiver() { my_built_predecessors.receiver_extract(*this); }
#endif
};
template<typename InputTuple, typename OutputType, typename StructTypes>
class indexer_node_FE {
public:
static const int N = tbb::flow::tuple_size<InputTuple>::value;
typedef OutputType output_type;
typedef InputTuple input_type;
// Some versions of Intel(R) C++ Compiler fail to generate an implicit constructor for the class which has std::tuple as a member.
indexer_node_FE() : my_inputs() {}
input_type &input_ports() { return my_inputs; }
protected:
input_type my_inputs;
};
template<typename InputTuple, typename OutputType, typename StructTypes>
class indexer_node_base : public graph_node, public indexer_node_FE<InputTuple, OutputType,StructTypes>,
public sender<OutputType> {
protected:
using graph_node::my_graph;
public:
static const size_t N = tbb::flow::tuple_size<InputTuple>::value;
typedef OutputType output_type;
typedef StructTypes tuple_types;
typedef typename sender<output_type>::successor_type successor_type;
typedef indexer_node_FE<InputTuple, output_type,StructTypes> input_ports_type;
#if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
typedef typename sender<output_type>::built_successors_type built_successors_type;
typedef typename sender<output_type>::successor_list_type successor_list_type;
#endif
private:
// ----------- Aggregator ------------
enum op_type { reg_succ, rem_succ, try__put_task
#if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
, add_blt_succ, del_blt_succ,
blt_succ_cnt, blt_succ_cpy
#endif
};
typedef indexer_node_base<InputTuple,output_type,StructTypes> class_type;
class indexer_node_base_operation : public aggregated_operation<indexer_node_base_operation> {
public:
char type;
union {
output_type const *my_arg;
successor_type *my_succ;
task *bypass_t;
#if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
size_t cnt_val;
successor_list_type *succv;
#endif
};
indexer_node_base_operation(const output_type* e, op_type t) :
type(char(t)), my_arg(e) {}
indexer_node_base_operation(const successor_type &s, op_type t) : type(char(t)),
my_succ(const_cast<successor_type *>(&s)) {}
indexer_node_base_operation(op_type t) : type(char(t)) {}
};
typedef internal::aggregating_functor<class_type, indexer_node_base_operation> handler_type;
friend class internal::aggregating_functor<class_type, indexer_node_base_operation>;
aggregator<handler_type, indexer_node_base_operation> my_aggregator;
void handle_operations(indexer_node_base_operation* op_list) {
indexer_node_base_operation *current;
while(op_list) {
current = op_list;
op_list = op_list->next;
switch(current->type) {
case reg_succ:
my_successors.register_successor(*(current->my_succ));
__TBB_store_with_release(current->status, SUCCEEDED);
break;
case rem_succ:
my_successors.remove_successor(*(current->my_succ));
__TBB_store_with_release(current->status, SUCCEEDED);
break;
case try__put_task: {
current->bypass_t = my_successors.try_put_task(*(current->my_arg));
__TBB_store_with_release(current->status, SUCCEEDED); // return of try_put_task actual return value
}
break;
#if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
case add_blt_succ:
my_successors.internal_add_built_successor(*(current->my_succ));
__TBB_store_with_release(current->status, SUCCEEDED);
break;
case del_blt_succ:
my_successors.internal_delete_built_successor(*(current->my_succ));
__TBB_store_with_release(current->status, SUCCEEDED);
break;
case blt_succ_cnt:
current->cnt_val = my_successors.successor_count();
__TBB_store_with_release(current->status, SUCCEEDED);
break;
case blt_succ_cpy:
my_successors.copy_successors(*(current->succv));
__TBB_store_with_release(current->status, SUCCEEDED);
break;
#endif /* TBB_DEPRECATED_FLOW_NODE_EXTRACTION */
}
}
}
// ---------- end aggregator -----------
public:
indexer_node_base(graph& g) : graph_node(g), input_ports_type() {
indexer_helper<StructTypes,N>::set_indexer_node_pointer(this->my_inputs, this, g);
my_successors.set_owner(this);
my_aggregator.initialize_handler(handler_type(this));
}
indexer_node_base(const indexer_node_base& other) : graph_node(other.my_graph), input_ports_type(), sender<output_type>() {
indexer_helper<StructTypes,N>::set_indexer_node_pointer(this->my_inputs, this, other.my_graph);
my_successors.set_owner(this);
my_aggregator.initialize_handler(handler_type(this));
}
bool register_successor(successor_type &r) __TBB_override {
indexer_node_base_operation op_data(r, reg_succ);
my_aggregator.execute(&op_data);
return op_data.status == SUCCEEDED;
}
bool remove_successor( successor_type &r) __TBB_override {
indexer_node_base_operation op_data(r, rem_succ);
my_aggregator.execute(&op_data);
return op_data.status == SUCCEEDED;
}
task * try_put_task(output_type const *v) { // not a virtual method in this class
indexer_node_base_operation op_data(v, try__put_task);
my_aggregator.execute(&op_data);
return op_data.bypass_t;
}
#if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }
void internal_add_built_successor( successor_type &r) __TBB_override {
indexer_node_base_operation op_data(r, add_blt_succ);
my_aggregator.execute(&op_data);
}
void internal_delete_built_successor( successor_type &r) __TBB_override {
indexer_node_base_operation op_data(r, del_blt_succ);
my_aggregator.execute(&op_data);
}
size_t successor_count() __TBB_override {
indexer_node_base_operation op_data(blt_succ_cnt);
my_aggregator.execute(&op_data);
return op_data.cnt_val;
}
void copy_successors( successor_list_type &v) __TBB_override {
indexer_node_base_operation op_data(blt_succ_cpy);
op_data.succv = &v;
my_aggregator.execute(&op_data);
}
void extract() __TBB_override {
my_successors.built_successors().sender_extract(*this);
indexer_helper<StructTypes,N>::extract(this->my_inputs);
}
#endif /* TBB_DEPRECATED_FLOW_NODE_EXTRACTION */
protected:
void reset_node(reset_flags f) __TBB_override {
if(f & rf_clear_edges) {
my_successors.clear();
indexer_helper<StructTypes,N>::reset_inputs(this->my_inputs,f);
}
}
private:
broadcast_cache<output_type, null_rw_mutex> my_successors;
}; //indexer_node_base
template<int N, typename InputTuple> struct input_types;
template<typename InputTuple>
struct input_types<1, InputTuple> {
typedef typename tuple_element<0, InputTuple>::type first_type;
typedef typename internal::tagged_msg<size_t, first_type > type;
};
template<typename InputTuple>
struct input_types<2, InputTuple> {
typedef typename tuple_element<0, InputTuple>::type first_type;
typedef typename tuple_element<1, InputTuple>::type second_type;
typedef typename internal::tagged_msg<size_t, first_type, second_type> type;
};
template<typename InputTuple>
struct input_types<3, InputTuple> {
typedef typename tuple_element<0, InputTuple>::type first_type;
typedef typename tuple_element<1, InputTuple>::type second_type;
typedef typename tuple_element<2, InputTuple>::type third_type;
typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type> type;
};
template<typename InputTuple>
struct input_types<4, InputTuple> {
typedef typename tuple_element<0, InputTuple>::type first_type;
typedef typename tuple_element<1, InputTuple>::type second_type;
typedef typename tuple_element<2, InputTuple>::type third_type;
typedef typename tuple_element<3, InputTuple>::type fourth_type;
typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,
fourth_type> type;
};
template<typename InputTuple>
struct input_types<5, InputTuple> {
typedef typename tuple_element<0, InputTuple>::type first_type;
typedef typename tuple_element<1, InputTuple>::type second_type;
typedef typename tuple_element<2, InputTuple>::type third_type;
typedef typename tuple_element<3, InputTuple>::type fourth_type;
typedef typename tuple_element<4, InputTuple>::type fifth_type;
typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,
fourth_type, fifth_type> type;
};
template<typename InputTuple>
struct input_types<6, InputTuple> {
typedef typename tuple_element<0, InputTuple>::type first_type;
typedef typename tuple_element<1, InputTuple>::type second_type;
typedef typename tuple_element<2, InputTuple>::type third_type;
typedef typename tuple_element<3, InputTuple>::type fourth_type;
typedef typename tuple_element<4, InputTuple>::type fifth_type;
typedef typename tuple_element<5, InputTuple>::type sixth_type;
typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,
fourth_type, fifth_type, sixth_type> type;
};
template<typename InputTuple>
struct input_types<7, InputTuple> {
typedef typename tuple_element<0, InputTuple>::type first_type;
typedef typename tuple_element<1, InputTuple>::type second_type;
typedef typename tuple_element<2, InputTuple>::type third_type;
typedef typename tuple_element<3, InputTuple>::type fourth_type;
typedef typename tuple_element<4, InputTuple>::type fifth_type;
typedef typename tuple_element<5, InputTuple>::type sixth_type;
typedef typename tuple_element<6, InputTuple>::type seventh_type;
typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,
fourth_type, fifth_type, sixth_type,
seventh_type> type;
};
template<typename InputTuple>
struct input_types<8, InputTuple> {
typedef typename tuple_element<0, InputTuple>::type first_type;
typedef typename tuple_element<1, InputTuple>::type second_type;
typedef typename tuple_element<2, InputTuple>::type third_type;
typedef typename tuple_element<3, InputTuple>::type fourth_type;
typedef typename tuple_element<4, InputTuple>::type fifth_type;
typedef typename tuple_element<5, InputTuple>::type sixth_type;
typedef typename tuple_element<6, InputTuple>::type seventh_type;
typedef typename tuple_element<7, InputTuple>::type eighth_type;
typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,
fourth_type, fifth_type, sixth_type,
seventh_type, eighth_type> type;
};
template<typename InputTuple>
struct input_types<9, InputTuple> {
typedef typename tuple_element<0, InputTuple>::type first_type;
typedef typename tuple_element<1, InputTuple>::type second_type;
typedef typename tuple_element<2, InputTuple>::type third_type;
typedef typename tuple_element<3, InputTuple>::type fourth_type;
typedef typename tuple_element<4, InputTuple>::type fifth_type;
typedef typename tuple_element<5, InputTuple>::type sixth_type;
typedef typename tuple_element<6, InputTuple>::type seventh_type;
typedef typename tuple_element<7, InputTuple>::type eighth_type;
typedef typename tuple_element<8, InputTuple>::type nineth_type;
typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,
fourth_type, fifth_type, sixth_type,
seventh_type, eighth_type, nineth_type> type;
};
template<typename InputTuple>
struct input_types<10, InputTuple> {
typedef typename tuple_element<0, InputTuple>::type first_type;
typedef typename tuple_element<1, InputTuple>::type second_type;
typedef typename tuple_element<2, InputTuple>::type third_type;
typedef typename tuple_element<3, InputTuple>::type fourth_type;
typedef typename tuple_element<4, InputTuple>::type fifth_type;
typedef typename tuple_element<5, InputTuple>::type sixth_type;
typedef typename tuple_element<6, InputTuple>::type seventh_type;
typedef typename tuple_element<7, InputTuple>::type eighth_type;
typedef typename tuple_element<8, InputTuple>::type nineth_type;
typedef typename tuple_element<9, InputTuple>::type tenth_type;
typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,
fourth_type, fifth_type, sixth_type,
seventh_type, eighth_type, nineth_type,
tenth_type> type;
};
// type generators
template<typename OutputTuple>
struct indexer_types : public input_types<tuple_size<OutputTuple>::value, OutputTuple> {
static const int N = tbb::flow::tuple_size<OutputTuple>::value;
typedef typename input_types<N, OutputTuple>::type output_type;
typedef typename wrap_tuple_elements<N,indexer_input_port,OutputTuple>::type input_ports_type;
typedef internal::indexer_node_FE<input_ports_type,output_type,OutputTuple> indexer_FE_type;
typedef internal::indexer_node_base<input_ports_type, output_type, OutputTuple> indexer_base_type;
};
template<class OutputTuple>
class unfolded_indexer_node : public indexer_types<OutputTuple>::indexer_base_type {
public:
typedef typename indexer_types<OutputTuple>::input_ports_type input_ports_type;
typedef OutputTuple tuple_types;
typedef typename indexer_types<OutputTuple>::output_type output_type;
private:
typedef typename indexer_types<OutputTuple>::indexer_base_type base_type;
public:
unfolded_indexer_node(graph& g) : base_type(g) {}
unfolded_indexer_node(const unfolded_indexer_node &other) : base_type(other) {}
};
} /* namespace internal */
#endif /* __TBB__flow_graph_indexer_impl_H */
internal::input_types< 8, InputTuple >::fourth_type
tuple_element< 3, InputTuple >::type fourth_type
Definition: _flow_graph_indexer_impl.h:410
internal::indexer_node_base::indexer_node_base_operation::my_succ
successor_type * my_succ
Definition: _flow_graph_indexer_impl.h:199
internal::indexer_node_base::successor_type
sender< output_type >::successor_type successor_type
Definition: _flow_graph_indexer_impl.h:177
internal::input_types< 1, InputTuple >::type
internal::tagged_msg< size_t, first_type > type
Definition: _flow_graph_indexer_impl.h:339
internal::input_types< 2, InputTuple >::second_type
tuple_element< 1, InputTuple >::type second_type
Definition: _flow_graph_indexer_impl.h:345
internal::indexer_node_base::try__put_task
Definition: _flow_graph_indexer_impl.h:186
internal::indexer_input_port::my_graph
graph * my_graph
Definition: _flow_graph_indexer_impl.h:93
internal::input_types< 10, InputTuple >::nineth_type
tuple_element< 8, InputTuple >::type nineth_type
Definition: _flow_graph_indexer_impl.h:447
internal::SUCCEEDED
Definition: _flow_graph_types_impl.h:719
internal::indexer_node_base::reset_node
void reset_node(reset_flags f) __TBB_override
Definition: _flow_graph_indexer_impl.h:322
internal
Definition: _flow_graph_async_msg_impl.h:24
internal::input_types< 8, InputTuple >::second_type
tuple_element< 1, InputTuple >::type second_type
Definition: _flow_graph_indexer_impl.h:408
internal::input_types< 5, InputTuple >::fifth_type
tuple_element< 4, InputTuple >::type fifth_type
Definition: _flow_graph_indexer_impl.h:373
internal::indexer_input_port::graph_reference
graph & graph_reference() const __TBB_override
Definition: _flow_graph_indexer_impl.h:136
internal::indexer_input_port::set_up
void set_up(void *p, forward_function_ptr f, graph &g)
Definition: _flow_graph_indexer_impl.h:100
internal::input_types< 9, InputTuple >::type
internal::tagged_msg< size_t, first_type, second_type, third_type, fourth_type, fifth_type, sixth_type, seventh_type, eighth_type, nineth_type > type
Definition: _flow_graph_indexer_impl.h:434
internal::input_types< 6, InputTuple >::sixth_type
tuple_element< 5, InputTuple >::type sixth_type
Definition: _flow_graph_indexer_impl.h:385
internal::input_types< 6, InputTuple >::fourth_type
tuple_element< 3, InputTuple >::type fourth_type
Definition: _flow_graph_indexer_impl.h:383
internal::indexer_types
Definition: _flow_graph_indexer_impl.h:457
internal::input_types< 6, InputTuple >::first_type
tuple_element< 0, InputTuple >::type first_type
Definition: _flow_graph_indexer_impl.h:380
tbb::interface6::internal::aggregated_operation::status
uintptr_t status
Zero value means "wait" status, all other values are "user" specified values and are defined into the...
Definition: _aggregator_impl.h:36
internal::successor_cache::set_owner
void set_owner(owner_type *owner)
Definition: _flow_graph_cache_impl.h:326
internal::successor_cache::remove_successor
void remove_successor(successor_type &r)
Definition: _flow_graph_cache_impl.h:335
internal::input_types< 10, InputTuple >::fifth_type
tuple_element< 4, InputTuple >::type fifth_type
Definition: _flow_graph_indexer_impl.h:443
internal::unfolded_indexer_node::output_type
indexer_types< OutputTuple >::output_type output_type
Definition: _flow_graph_indexer_impl.h:470
internal::indexer_input_port::my_indexer_ptr
void * my_indexer_ptr
Definition: _flow_graph_indexer_impl.h:85
tbb::flow::interface11::reset_flags
reset_flags
Definition: _flow_graph_impl.h:158
internal::indexer_node_base::tuple_types
StructTypes tuple_types
Definition: _flow_graph_indexer_impl.h:176
internal::indexer_node_base::handler_type
internal::aggregating_functor< class_type, indexer_node_base_operation > handler_type
Definition: _flow_graph_indexer_impl.h:213
internal::input_types< 8, InputTuple >::sixth_type
tuple_element< 5, InputTuple >::type sixth_type
Definition: _flow_graph_indexer_impl.h:412
internal::input_types< 8, InputTuple >::type
internal::tagged_msg< size_t, first_type, second_type, third_type, fourth_type, fifth_type, sixth_type, seventh_type, eighth_type > type
Definition: _flow_graph_indexer_impl.h:417
internal::input_types< 9, InputTuple >::first_type
tuple_element< 0, InputTuple >::type first_type
Definition: _flow_graph_indexer_impl.h:423
internal::successor_cache::register_successor
void register_successor(successor_type &r)
Definition: _flow_graph_cache_impl.h:330
internal::broadcast_cache
A cache of successors that are broadcast to.
Definition: _flow_graph_cache_impl.h:465
internal::do_try_put
task * do_try_put(const T &v, void *p)
Definition: _flow_graph_indexer_impl.h:34
tbb::interface6::internal::aggregator
Definition: _aggregator_impl.h:144
internal::indexer_node_base::my_successors
broadcast_cache< output_type, null_rw_mutex > my_successors
Definition: _flow_graph_indexer_impl.h:330
internal::indexer_node_base::handle_operations
void handle_operations(indexer_node_base_operation *op_list)
Definition: _flow_graph_indexer_impl.h:217
internal::indexer_helper< TupleTypes, 1 >::set_indexer_node_pointer
static void set_indexer_node_pointer(PortTuple &my_input, IndexerNodeBaseType *p, graph &g)
Definition: _flow_graph_indexer_impl.h:65
internal::input_types< 8, InputTuple >::third_type
tuple_element< 2, InputTuple >::type third_type
Definition: _flow_graph_indexer_impl.h:409
internal::indexer_input_port::reset_receiver
void reset_receiver(reset_flags) __TBB_override
Definition: _flow_graph_indexer_impl.h:144
internal::indexer_node_FE::indexer_node_FE
indexer_node_FE()
Definition: _flow_graph_indexer_impl.h:160
internal::input_types< 8, InputTuple >::eighth_type
tuple_element< 7, InputTuple >::type eighth_type
Definition: _flow_graph_indexer_impl.h:414
internal::indexer_node_FE::input_ports
input_type & input_ports()
Definition: _flow_graph_indexer_impl.h:162
internal::input_types< 6, InputTuple >::fifth_type
tuple_element< 4, InputTuple >::type fifth_type
Definition: _flow_graph_indexer_impl.h:384
internal::input_types< 9, InputTuple >::seventh_type
tuple_element< 6, InputTuple >::type seventh_type
Definition: _flow_graph_indexer_impl.h:429
internal::input_types< 6, InputTuple >::type
internal::tagged_msg< size_t, first_type, second_type, third_type, fourth_type, fifth_type, sixth_type > type
Definition: _flow_graph_indexer_impl.h:387
internal::input_types< 10, InputTuple >::second_type
tuple_element< 1, InputTuple >::type second_type
Definition: _flow_graph_indexer_impl.h:440
internal::indexer_node_base
indexer_node_base
Definition: _flow_graph_indexer_impl.h:169
internal::indexer_input_port::forward_function_ptr
task *(* forward_function_ptr)(T const &, void *)
Definition: _flow_graph_indexer_impl.h:86
internal::input_types< 7, InputTuple >::first_type
tuple_element< 0, InputTuple >::type first_type
Definition: _flow_graph_indexer_impl.h:392
internal::input_types< 4, InputTuple >::first_type
tuple_element< 0, InputTuple >::type first_type
Definition: _flow_graph_indexer_impl.h:359
internal::unfolded_indexer_node::input_ports_type
indexer_types< OutputTuple >::input_ports_type input_ports_type
Definition: _flow_graph_indexer_impl.h:468
internal::input_types< 10, InputTuple >::first_type
tuple_element< 0, InputTuple >::type first_type
Definition: _flow_graph_indexer_impl.h:439
internal::indexer_input_port::try_put_task
task * try_put_task(const T &v) __TBB_override
Definition: _flow_graph_indexer_impl.h:132
internal::input_types< 10, InputTuple >::tenth_type
tuple_element< 9, InputTuple >::type tenth_type
Definition: _flow_graph_indexer_impl.h:448
internal::input_types< 7, InputTuple >::seventh_type
tuple_element< 6, InputTuple >::type seventh_type
Definition: _flow_graph_indexer_impl.h:398
internal::input_types< 7, InputTuple >::type
internal::tagged_msg< size_t, first_type, second_type, third_type, fourth_type, fifth_type, sixth_type, seventh_type > type
Definition: _flow_graph_indexer_impl.h:401
internal::input_types< 3, InputTuple >::first_type
tuple_element< 0, InputTuple >::type first_type
Definition: _flow_graph_indexer_impl.h:351
internal::input_types< 2, InputTuple >::first_type
tuple_element< 0, InputTuple >::type first_type
Definition: _flow_graph_indexer_impl.h:344
internal::input_types< 2, InputTuple >::type
internal::tagged_msg< size_t, first_type, second_type > type
Definition: _flow_graph_indexer_impl.h:346
internal::tagged_msg
Definition: _flow_graph_types_impl.h:612
internal::input_types< 5, InputTuple >::third_type
tuple_element< 2, InputTuple >::type third_type
Definition: _flow_graph_indexer_impl.h:371
internal::indexer_node_base::indexer_node_base_operation::type
char type
Definition: _flow_graph_indexer_impl.h:196
internal::indexer_types::indexer_FE_type
internal::indexer_node_FE< input_ports_type, output_type, OutputTuple > indexer_FE_type
Definition: _flow_graph_indexer_impl.h:461
internal::indexer_node_base::indexer_node_base_operation::my_arg
const output_type * my_arg
Definition: _flow_graph_indexer_impl.h:198
internal::indexer_types::indexer_base_type
internal::indexer_node_base< input_ports_type, output_type, OutputTuple > indexer_base_type
Definition: _flow_graph_indexer_impl.h:462
internal::indexer_node_base::reg_succ
Definition: _flow_graph_indexer_impl.h:186
internal::indexer_types::input_ports_type
wrap_tuple_elements< N, indexer_input_port, OutputTuple >::type input_ports_type
Definition: _flow_graph_indexer_impl.h:460
internal::input_types< 7, InputTuple >::fifth_type
tuple_element< 4, InputTuple >::type fifth_type
Definition: _flow_graph_indexer_impl.h:396
internal::indexer_node_base::register_successor
bool register_successor(successor_type &r) __TBB_override
Definition: _flow_graph_indexer_impl.h:273
internal::input_types< 9, InputTuple >::eighth_type
tuple_element< 7, InputTuple >::type eighth_type
Definition: _flow_graph_indexer_impl.h:430
internal::indexer_node_FE::output_type
OutputType output_type
Definition: _flow_graph_indexer_impl.h:156
internal::input_types< 1, InputTuple >::first_type
tuple_element< 0, InputTuple >::type first_type
Definition: _flow_graph_indexer_impl.h:338
internal::input_types< 5, InputTuple >::second_type
tuple_element< 1, InputTuple >::type second_type
Definition: _flow_graph_indexer_impl.h:370
internal::indexer_node_base::indexer_node_base_operation::indexer_node_base_operation
indexer_node_base_operation(const successor_type &s, op_type t)
Definition: _flow_graph_indexer_impl.h:208
internal::input_types< 4, InputTuple >::third_type
tuple_element< 2, InputTuple >::type third_type
Definition: _flow_graph_indexer_impl.h:361
internal::indexer_node_base::remove_successor
bool remove_successor(successor_type &r) __TBB_override
Definition: _flow_graph_indexer_impl.h:279
internal::input_types< 4, InputTuple >::fourth_type
tuple_element< 3, InputTuple >::type fourth_type
Definition: _flow_graph_indexer_impl.h:362
internal::wrap_tuple_elements
Definition: _flow_graph_types_impl.h:49
internal::indexer_node_base::indexer_node_base
indexer_node_base(const indexer_node_base &other)
Definition: _flow_graph_indexer_impl.h:267
internal::input_types< 9, InputTuple >::fifth_type
tuple_element< 4, InputTuple >::type fifth_type
Definition: _flow_graph_indexer_impl.h:427
tbb::internal::__TBB_store_with_release
void __TBB_store_with_release(volatile T &location, V value)
Definition: tbb_machine.h:716
internal::input_types< 7, InputTuple >::second_type
tuple_element< 1, InputTuple >::type second_type
Definition: _flow_graph_indexer_impl.h:393
internal::indexer_input_port::run_and_put_task
friend class run_and_put_task
Definition: _flow_graph_indexer_impl.h:129
internal::unfolded_indexer_node::unfolded_indexer_node
unfolded_indexer_node(graph &g)
Definition: _flow_graph_indexer_impl.h:474
internal::input_types< 7, InputTuple >::third_type
tuple_element< 2, InputTuple >::type third_type
Definition: _flow_graph_indexer_impl.h:394
internal::indexer_node_base::class_type
indexer_node_base< InputTuple, output_type, StructTypes > class_type
Definition: _flow_graph_indexer_impl.h:192
internal::input_types< 6, InputTuple >::second_type
tuple_element< 1, InputTuple >::type second_type
Definition: _flow_graph_indexer_impl.h:381
internal::input_types< 8, InputTuple >::fifth_type
tuple_element< 4, InputTuple >::type fifth_type
Definition: _flow_graph_indexer_impl.h:411
internal::input_types< 9, InputTuple >::second_type
tuple_element< 1, InputTuple >::type second_type
Definition: _flow_graph_indexer_impl.h:424
internal::input_types< 10, InputTuple >::eighth_type
tuple_element< 7, InputTuple >::type eighth_type
Definition: _flow_graph_indexer_impl.h:446
tbb::interface6::internal::aggregating_functor
Definition: _aggregator_impl.h:160
internal::indexer_node_FE
Definition: _flow_graph_indexer_impl.h:153
internal::indexer_node_base::input_ports_type
indexer_node_FE< InputTuple, output_type, StructTypes > input_ports_type
Definition: _flow_graph_indexer_impl.h:178
internal::input_types< 4, InputTuple >::type
internal::tagged_msg< size_t, first_type, second_type, third_type, fourth_type > type
Definition: _flow_graph_indexer_impl.h:364
tbb::interface6::internal::aggregated_operation
aggregated_operation base class
Definition: _aggregator_impl.h:33
internal::input_types< 6, InputTuple >::third_type
tuple_element< 2, InputTuple >::type third_type
Definition: _flow_graph_indexer_impl.h:382
internal::input_types< 3, InputTuple >::second_type
tuple_element< 1, InputTuple >::type second_type
Definition: _flow_graph_indexer_impl.h:352
internal::input_types
Definition: _flow_graph_indexer_impl.h:334
internal::indexer_helper::set_indexer_node_pointer
static void set_indexer_node_pointer(PortTuple &my_input, IndexerNodeBaseType *p, graph &g)
Definition: _flow_graph_indexer_impl.h:42
internal::indexer_input_port::my_try_put_task
forward_function_ptr my_try_put_task
Definition: _flow_graph_indexer_impl.h:87
internal::input_types< 9, InputTuple >::nineth_type
tuple_element< 8, InputTuple >::type nineth_type
Definition: _flow_graph_indexer_impl.h:431
internal::input_types< 10, InputTuple >::third_type
tuple_element< 2, InputTuple >::type third_type
Definition: _flow_graph_indexer_impl.h:441
__TBB_override
#define __TBB_override
Definition: tbb_stddef.h:240
internal::input_types< 10, InputTuple >::fourth_type
tuple_element< 3, InputTuple >::type fourth_type
Definition: _flow_graph_indexer_impl.h:442
internal::broadcast_cache::try_put_task
task * try_put_task(const T &t) __TBB_override
Definition: _flow_graph_cache_impl.h:478
s
void const char const char int ITT_FORMAT __itt_group_sync s
Definition: ittnotify_static.h:91
internal::indexer_node_base::try_put_task
task * try_put_task(output_type const *v)
Definition: _flow_graph_indexer_impl.h:285
internal::input_types< 4, InputTuple >::second_type
tuple_element< 1, InputTuple >::type second_type
Definition: _flow_graph_indexer_impl.h:360
task
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
Definition: ittnotify_static.h:119
internal::indexer_node_base::output_type
OutputType output_type
Definition: _flow_graph_indexer_impl.h:175
internal::indexer_node_base::indexer_node_base_operation
Definition: _flow_graph_indexer_impl.h:194
internal::indexer_node_FE::N
static const int N
Definition: _flow_graph_indexer_impl.h:155
internal::indexer_node_base::indexer_node_base_operation::bypass_t
task * bypass_t
Definition: _flow_graph_indexer_impl.h:200
internal::input_types< 5, InputTuple >::fourth_type
tuple_element< 3, InputTuple >::type fourth_type
Definition: _flow_graph_indexer_impl.h:372
internal::indexer_node_base::op_type
op_type
Definition: _flow_graph_indexer_impl.h:186
internal::unfolded_indexer_node::unfolded_indexer_node
unfolded_indexer_node(const unfolded_indexer_node &other)
Definition: _flow_graph_indexer_impl.h:475
internal::indexer_input_port
Definition: _flow_graph_indexer_impl.h:83
internal::indexer_helper::reset_inputs
static void reset_inputs(InputTuple &my_input, reset_flags f)
Definition: _flow_graph_indexer_impl.h:49
internal::unfolded_indexer_node::base_type
indexer_types< OutputTuple >::indexer_base_type base_type
Definition: _flow_graph_indexer_impl.h:472
internal::input_types< 8, InputTuple >::seventh_type
tuple_element< 6, InputTuple >::type seventh_type
Definition: _flow_graph_indexer_impl.h:413
tbb::flow::interface11::rf_clear_edges
Definition: _flow_graph_impl.h:161
internal::indexer_node_base::my_aggregator
aggregator< handler_type, indexer_node_base_operation > my_aggregator
Definition: _flow_graph_indexer_impl.h:215
internal::input_types< 3, InputTuple >::third_type
tuple_element< 2, InputTuple >::type third_type
Definition: _flow_graph_indexer_impl.h:353
internal::successor_cache::clear
void clear()
Definition: _flow_graph_cache_impl.h:351
internal::indexer_node_base::N
static const size_t N
Definition: _flow_graph_indexer_impl.h:174
internal::input_types< 7, InputTuple >::sixth_type
tuple_element< 5, InputTuple >::type sixth_type
Definition: _flow_graph_indexer_impl.h:397
internal::input_types< 9, InputTuple >::third_type
tuple_element< 2, InputTuple >::type third_type
Definition: _flow_graph_indexer_impl.h:425
internal::input_types< 9, InputTuple >::sixth_type
tuple_element< 5, InputTuple >::type sixth_type
Definition: _flow_graph_indexer_impl.h:428
internal::input_types< 8, InputTuple >::first_type
tuple_element< 0, InputTuple >::type first_type
Definition: _flow_graph_indexer_impl.h:407
internal::indexer_types::N
static const int N
Definition: _flow_graph_indexer_impl.h:458
internal::input_types< 7, InputTuple >::fourth_type
tuple_element< 3, InputTuple >::type fourth_type
Definition: _flow_graph_indexer_impl.h:395
internal::unfolded_indexer_node
Definition: _flow_graph_indexer_impl.h:466
internal::indexer_node_base::indexer_node_base_operation::indexer_node_base_operation
indexer_node_base_operation(const output_type *e, op_type t)
Definition: _flow_graph_indexer_impl.h:206
internal::unfolded_indexer_node::tuple_types
OutputTuple tuple_types
Definition: _flow_graph_indexer_impl.h:469
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 value
Definition: ittnotify_static.h:192
internal::input_types< 3, InputTuple >::type
internal::tagged_msg< size_t, first_type, second_type, third_type > type
Definition: _flow_graph_indexer_impl.h:354
internal::indexer_helper
Definition: _flow_graph_indexer_impl.h:40
internal::indexer_helper< TupleTypes, 1 >::reset_inputs
static void reset_inputs(InputTuple &my_input, reset_flags f)
Definition: _flow_graph_indexer_impl.h:71
_flow_graph_types_impl.h
internal::input_types< 9, InputTuple >::fourth_type
tuple_element< 3, InputTuple >::type fourth_type
Definition: _flow_graph_indexer_impl.h:426
internal::indexer_types::output_type
input_types< N, OutputTuple >::type output_type
Definition: _flow_graph_indexer_impl.h:459
p
void const char const char int ITT_FORMAT __itt_group_sync p
Definition: ittnotify_static.h:91
internal::indexer_node_FE::my_inputs
input_type my_inputs
Definition: _flow_graph_indexer_impl.h:164
internal::input_types< 5, InputTuple >::first_type
tuple_element< 0, InputTuple >::type first_type
Definition: _flow_graph_indexer_impl.h:369
internal::indexer_node_base::indexer_node_base_operation::indexer_node_base_operation
indexer_node_base_operation(op_type t)
Definition: _flow_graph_indexer_impl.h:210
internal::round_robin_cache
A cache of successors that are put in a round-robin fashion.
Definition: _flow_graph_cache_impl.h:546
internal::input_types< 10, InputTuple >::type
internal::tagged_msg< size_t, first_type, second_type, third_type, fourth_type, fifth_type, sixth_type, seventh_type, eighth_type, nineth_type, tenth_type > type
Definition: _flow_graph_indexer_impl.h:452
internal::indexer_node_base::rem_succ
Definition: _flow_graph_indexer_impl.h:186
internal::input_types< 10, InputTuple >::seventh_type
tuple_element< 6, InputTuple >::type seventh_type
Definition: _flow_graph_indexer_impl.h:445
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 type
Definition: ittnotify_static.h:198
internal::indexer_node_FE::input_type
InputTuple input_type
Definition: _flow_graph_indexer_impl.h:157
tbb::interface6::internal::aggregated_operation::next
Derived * next
Definition: _aggregator_impl.h:38
internal::input_types< 5, InputTuple >::type
internal::tagged_msg< size_t, first_type, second_type, third_type, fourth_type, fifth_type > type
Definition: _flow_graph_indexer_impl.h:375
internal::indexer_node_base::indexer_node_base
indexer_node_base(graph &g)
Definition: _flow_graph_indexer_impl.h:261
internal::input_types< 10, InputTuple >::sixth_type
tuple_element< 5, InputTuple >::type sixth_type
Definition: _flow_graph_indexer_impl.h:444

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.