receiver<TupleType> で sender< tuple_element< i, TupleType >::type > 出力ポートのタプルを含むテンプレート・クラス (i はタプルのインデックス)。split_node は、受け取ったタプルの各要素を、受け取ったタプルの要素のインデックスと一致する出力ポートに送ります。このノードは無制限に並列化できます。
template < typename TupleType > class split_node;
#include "tbb/flow_graph.h"
このノードは、1 つの入力ポートでタプルを受け取り、タプルの各要素からメッセージを生成して、対応する出力ポートに渡します。
split_node は無制限に並列化でき (バッファーなし)、複数の出力ポートを含む broadcast_node として動作します。
下記のサンプルは、整数のタプルのストリームを分けて適切な出力キューにタプルの各要素を配置する split_node を示しています。
split_node の出力ポートは、make_edge メソッドおよび register_successor を使用してほかのグラフのノードに接続できます。
#include "tbb/flow_graph.h" using namespace tbb::flow; int main() { graph g; queue_node<int> first_queue(g); queue_node<int> second_queue(g); split_node< tbb::flow::tuple<int,int> > my_split_node(g); output_port<0>(my_split_node).register_successor(first_queue); make_edge(output_port<1>(my_split_node), second_queue); for(int i = 0; i < 1000; ++i) { tuple<int, int> my_tuple(2*i, 2*i+1); my_split_node.try_put(my_tuple); } g.wait_for_all(); }
namespace tbb { template < typename TupleType > class split_node : public graph_node, public receiver<TupleType> { public: split_node( graph &g ); split_node( const split_node &other); ~split_node(); // receiver< TupleType > typedef TupleType input_type; typedef sender<input_type> predecessor_type; bool try_put( const input_type &v ); bool register_predecessor( predecessor_type &p ); bool remove_predecessor( predecessor_type &p ); typedef implementation-dependent output_ports_type; output_ports_type& output_ports(); }; }
メンバー | 説明 |
---|---|
split_node( graph &g ) |
グラフ g で登録された split_node を構築します。 |
split_node( const split_node &other) |
other の構築時の状態と同じ初期状態で split_node を構築します。構築される split_node には、other と同じ graph オブジェクトへの参照が含まれます。other のプレデセッサーおよびサクセサーはコピーされません。 |
~split_node() |
デストラクター。 |
bool try_put( const input_type &v ) |
受け取ったタプルの各要素を、split_node の出力ポートに接続されているノードにブロードキャストします。v の i 番目の要素が i 番目の出力ポートにブロードキャストされます。 戻り値: true。 |
bool register_predecessor( predecessor_type &p ) |
プレデセッサーのセットに p を追加します。 戻り値: true。 |
bool remove_predecessor( predecessor_type &p ) |
プレデセッサーのセットから p を削除します。 戻り値: true。 |
output_ports_type& output_ports(); |
戻り値: 出力ポートのタプル。 |