7 #include "imstkTbbTaskGraphController.h" 8 #include "imstkMacros.h" 9 #include "imstkTaskGraph.h" 12 DISABLE_WARNING_PADDING
13 #include <tbb/flow_graph.h> 21 TbbTaskGraphController::execute()
23 using TbbContinueNode = continue_node<continue_msg>;
27 broadcast_node<continue_msg> start(g);
30 std::unordered_map<std::shared_ptr<TaskNode>, TbbContinueNode> tbbNodes;
31 using NodeKeyValuePair = std::pair<std::shared_ptr<TaskNode>, TbbContinueNode>;
33 const TaskNodeVector& nodes = m_graph->getNodes();
34 if (nodes.size() == 0)
38 tbbNodes.reserve(nodes.size());
39 for (
size_t i = 0; i < nodes.size(); i++)
41 if (m_graph->getSource() != nodes[i])
43 std::shared_ptr<TaskNode> node = nodes[i];
44 tbbNodes.insert(NodeKeyValuePair(node, TbbContinueNode(g,
45 [node](continue_msg) { node->execute(); })));
49 const TaskNodeAdjList& adjList = m_graph->getAdjList();
50 for (
const auto& i : adjList)
52 if (i.first == m_graph->getSource())
54 for (
const auto& outputNode : i.second)
56 TbbContinueNode& tbbNode2 = tbbNodes.at(outputNode);
57 make_edge(start, tbbNode2);
62 TbbContinueNode& tbbNode1 = tbbNodes.at(i.first);
63 for (
const auto& outputNode : i.second)
65 TbbContinueNode& tbbNode2 = tbbNodes.at(outputNode);
66 make_edge(tbbNode1, tbbNode2);
71 start.try_put(continue_msg());