composite_node

[flow_graph.composite_node]

最初のグラフ・ノード・クラスとしてほかのノードのコレクションをカプセル化するノード。


// <oneapi/tbb/flow_graph.h> ヘッダーで定義 

namespace oneapi { 
namespace tbb { 
namespace flow { 

    template< typename InputTuple, typename OutputTuple > class composite_node; 

    // 入力ポートと出力ポートを備えた composite_node  

    template< typename...InputTypes, typename... OutputTypes> 
    class composite_node <std::tuple<InputTypes...>, std::tuple<OutputTypes...> > : public graph_node { 
    public: 
        typedef std::tuple< receiver<InputTypes>&...> input_ports_type; 
        typedef std::tuple< sender<OutputTypes>&...> output_ports_type; 

        composite_node( graph &g ); 
        virtual ~composite_node(); 
    
        void set_external_ports(input_ports_type&& input_ports_tuple, output_ports_type&& output_ports_tuple); 
        input_ports_type& input_ports(); 
        output_ports_type& output_ports(); 
    }; 

    // 入力ポートのみの composite_node  
    template< typename...InputTypes> class composite_node <std::tuple<InputTypes...>, std::tuple<> > : public graph_node{ 
    public: 
        typedef std::tuple< receiver<InputTypes>&...> input_ports_type; 

        composite_node( graph &g ); 
        virtual ~composite_node(); 
    
        void set_external_ports(input_ports_type&& input_ports_tuple); 
        input_ports_type& input_ports(); 
    }; 

    // 出力ポートのみの composite_node 
    template<typename...OutputTypes> 
    class composite_node <std::tuple<>, std::tuple<OutputTypes...> > : public graph_node{ 
    public: 
        typedef std::tuple< sender<OutputTypes>&...> output_ports_type; 

        composite_node( graph &g ); 
        virtual ~composite_node(); 

        void set_external_ports(output_ports_type&& output_ports_tuple); 
        output_ports_type& output_ports(); 
    }; 

} // namespace flow 
} // namespace tbb 
} // namespace oneapi
  • InputTuple および OutputTuple は、std::tuple のインスタンス化でなければなりません。

composite_node は、graph_nodereceiver<T>、および sender<T> です。

composite_node は、任意の数のほかのノードをパッケージできます。composite_node に接するパッケージ内のノードへの入力ポートと出力ポートの参照を維持します。これらの参照を使用して、composite_node 外のほかのノードにエッジを作成できます。InputTuple は入力タイプのタプルです。composite_node には、InputTuple の各タイプに 1 つの入力ポートがあります。同様に、OutputTuple は出力タイプのタプルです。composite_node には、OutputTuple の各タイプに 1 つの出力ポートがあります。

composite_node は、次の 3 つの特殊化を備えた複数ポートのノードです。

  • 複数入力ポートと複数出力ポートの複数ポートノードこの特殊化は、InputTuple のタイプの receiver (レシーバー) である入力ポートのタプルを持ちます。各入力ポートは、composite_node がカプセル化するノードのポートへの参照です。同様に、この特殊化は OutputTuple のタイプの sender (センダー) である出力ポートのタプルも持ちます。各出力ポートは、composite_node がカプセル化するノードのポートへの参照です。

  • 入力ポートを持ち出力ポートを持たない複数ポートノードこの特殊化は入力ポートのタプルのみを持ちます。

  • 出力ポートを持ち入力ポートを持たない複数ポートノードこの特殊化は出力ポートのタプルのみを持ちます。

関数テンプレート input_port を使用して特定の入力ポートへの参照を取得し、関数テンプレート output_port を使用して特定の出力ポートへの参照を取得できます。

composite_node の構築は 2 段階で行われます。

  • InputTupleOutputTuple を指定して composite_node を定義します。

  • composite_node に接するカプセル化されたノードから composite_node の入力ポートおよび出力ポートへのエイリアスを作成します。この処理を行わないと composite_node の入力ポートおよび出力ポートは実際のノードにバインドされないため必須です。エイリアスの作成は、set_external_ports メソッドを呼び出して行います。

composite_node は、[copyconstructible] ISO C++ 標準の CopyConstructible の要件を満たしません。

メンバー関数

composite_node(graph &g)

グラフ g に属する composite_node を構築します。

void set_external_ports(input_ports_type &&input_ports_tuple, output_ports_type &&output_ports_tuple)

composite_node の入力ポートと出力ポートを input_ports_tuple および output_ports_tuple で参照されるポートへのエイリアスとして作成します。input_ports_tuple の位置 N で参照されるポートが composite_nodeN 番目の入力ポートとしてマップされます。出力ポートも同様です。

input_ports_type &input_ports()

戻り値: receiversstd::tuple を返します。各要素は、set_external_ports() の該当する位置にエイリアスされた実際のノードまたは出力ポートへの参照です。

警告

set_external_ports() を事前に呼び出さずに input_ports() を呼び出すと、未定義の動作となります。

output_ports_type &output_ports()

戻り値: sendersstd::tuple を返します。各要素は、set_external_ports() の該当する位置にエイリアスされた実際のノードまたは出力ポートへの参照です。

警告

set_external_ports() を事前に呼び出さずに output_ports() を呼び出すと、未定義の動作となります。

参照: