split_node テンプレート・クラス

概要

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 の出力ポートに接続されているノードにブロードキャストします。vi 番目の要素が i 番目の出力ポートにブロードキャストされます。

戻り値: true

bool register_predecessor( predecessor_type &p )

プレデセッサーのセットに p を追加します。

戻り値: true

bool remove_predecessor( predecessor_type &p )

プレデセッサーのセットから p を削除します。

戻り値: true

output_ports_type& output_ports();

戻り値: 出力ポートのタプル。

関連情報