continue_node

[flow_graph.continue_node]

トリガーされた時に指定されたボディー・オブジェクトを実行するノード。


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

namespace oneapi { 
namespace tbb { 
namespace flow { 

    template< typename Output, typename Policy = /*implementation-defined*/ > 
    class continue_node : public graph_node, public receiver<continue_msg>, public sender<Output> { 
    public: 
        template<typename Body> 
        continue_node( graph &g, Body body, node_priority_t priority = no_priority ); 
        template<typename Body> 
        continue_node( graph &g, Body body, Policy /*unspecified*/ = Policy(), 
                       node_priority_t priority = no_priority ); 

        template<typename Body> 
        continue_node( graph &g, int number_of_predecessors, Body body, 
                       node_priority_t priority = no_priority ); 
        template<typename Body> 
        continue_node( graph &g, int number_of_predecessors, Body body, 
                       Policy /*unspecified*/ = Policy(), node_priority_t priority = no_priority ); 

        continue_node( const continue_node &src ); 
        ~continue_node(); 

        bool try_put( const input_type &v ); 
        bool try_get( output_type &v ); 
    }; 

} // namespace flow 
} // namespace tbb 
} // namespace oneapi

要件:

  • Output タイプは、[copyconstructible] ISO C++ 標準の CopyConstructible の要件を満たしている必要があります。

  • Policy は、軽量ポリシーをデフォルトにできます。

  • Body タイプは、ContinueNodeBody 要件を満たしている必要があります。

continue_node は、graph_nodereceiver<continue_msg>、および sender<Output> です。

このノードは、先行するノードの完了を待機してから実行を開始するノードに使用されますが、入力エッジを超えて明示的なデータが渡されることはありません。

continue_node は、先行するノード数を定義する内部のしきい値を保持します。この値は作成時に与えられます。レシーバーとして continue_node を使用して make_edge 関数を呼び出すと、しきい値が増加します。また、レシーバーとして continue_node を使用し remove_edge 関数を呼び出すと、しきい値は減少します。

try_put() 呼び出し回数が定義されたしきい値に達するごとにノードの body が呼び出され、ノードは最初から try_put() 呼び出し回数のカウントを開始します。

continue_node には、discardingbroadcast-push プロパティーがあります。

continue_node に渡されたボディー・オブジェクトはコピーされます。メンバー変数を更新してもノードの作成に使用された元のオブジェクトには影響しません。ノードの外部からボディー・オブジェクト内に保持されている状態を確認する必要がある場合、copy_body 関数を使用して更新されたコピーを取得します。

メンバー関数


template<typename Body> 
continue_node( graph &g, Body body, node_priority_t priority = no_priority );

body を呼び出す continue_node を構築します。内部しきい値は 0 に設定されます。

この関数はノードの優先順位を指定します。



template<typename Body> 
continue_node( graph &g, Body body, Policy /*unspecified*/ = Policy(), 
               node_priority_t priority = no_priority );

body を呼び出す continue_node を構築します。内部しきい値は 0 に設定されます。

この関数は、軽量ポリシーノードの優先順位を指定します。



template<typename Body> 
continue_node( graph &g, int number_of_predecessors, Body body, 
               node_priority_t priority = no_priority );

body を呼び出す continue_node を構築します。内部しきい値は number_of_predecessors に設定されます。

この関数はノードの優先順位を指定します。



template<typename Body> 
continue_node( graph &g, int number_of_predecessors, Body body, 
               Policy /*unspecified*/ = Policy(), node_priority_t priority = no_priority );

body を呼び出す continue_node を構築します。内部しきい値は number_of_predecessors に設定されます。

この関数は、軽量ポリシーノードの優先順位を指定します。



template<typename Body> 
continue_node( graph &g, int number_of_predecessors, Body body );

body を呼び出す continue_node を構築します。内部しきい値は number_of_predecessors に設定されます。


continue_node( const continue_node &src )

src の作成時の状態と同じ初期状態で continue_node を作成します。try_puts 呼び出しを受信した回数、または既知のプリディセッサー (先行) 数。作成される continue_node には、src と同じ graph オブジェクトへの参照があり、src で使用される初期 body のコピーが含まれ、src がゼロ以外のしきい値である場合にのみそのしきい値が含まれます。

新しいボディー・オブジェクトは、src の作成時に提供された元のボディーのコピー作成されます。


bool try_put( const Input &v )

try_put() 呼び出しを受信した回数をインクリメントします。インクリメントされたカウント値が既知のプリディセッサー数と等しい場合、body 関数オブジェクトを実行します。ボディーの実行が完了するのを待ちません。

戻り値: true


bool try_get( Output &v )

戻り値: false

デダクション・ガイド


template <typename Body, typename Policy> 
continue_node(graph&, Body, Policy, node_priority_t = no_priority) 
    -> continue_node<continue_output_t<std::invoke_result_t<Body, continue_msg>>, Policy>; 

template <typename Body, typename Policy> 
continue_node(graph&, int, Body, Policy, node_priority_t = no_priority) 
    -> continue_node<continue_output_t<std::invoke_result_t<Body, continue_msg>>, Policy>; 

template <typename Body> 
continue_node(graph&, Body, node_priority_t = no_priority) 
    -> continue_node<continue_output_t<std::invoke_result_t<Body, continue_msg>>, /*default-policy*/>; 

template <typename Body> 
continue_node(graph&, int, Body, node_priority_t = no_priority) 
    -> continue_node<continue_output_t<std::invoke_result_t<Body, continue_msg>>, /*default-policy*/>;

説明:

  • continue_output_t<Output>Output テンプレート引数タイプのエイリアスです。Outputvoid として指定される場合、continue_output_t<Output>continue_msg タイプのエイリアスです。

continue_nodes依存関係フローグラフを形成します。