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(); |
戻り値: 出力ポートのタプル。 |