function_node

[flow_graph.function_node]

着信メッセージのユーザー定義ボディーを実行するノード。


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

namespace oneapi { 
namespace tbb { 
namespace flow { 

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

        function_node( const function_node &src ); 

        bool try_put( const Input &v ); 
        bool try_get( Output &v ); 
    }; 

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

要件:

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

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

  • Policy タイプは、軽量、キューおよび拒否ポリシーまたはデフォルトにすることができます。

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

function_node には、ユーザーによる同時実行の制限が適用されます。事前定義された値の 1 つに設定できます。ユーザーは、std::size_t タイプの値を 1 から tbb::flow::unlimited の間に設定して同時実行性を制限できます。

同時実行の制限により直ちに処理できないメッセージは、Policy テンプレートの引数に基づいて処理されます。

function_node は、graph_nodereceiver<Input>、および sender<Output> です。

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

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

メンバー関数


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

body のコピーを呼び出す function_node を作成します。body への同時呼び出しのほとんどは、同時に行われます。

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



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

body のコピーを呼び出す function_node を作成します。body への同時呼び出しのほとんどは、同時に行われます。

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


function_node( const function_node &src )

src の作成時の状態と同じ初期状態で function_node を作成します。作成される function_nodesrc と同じ graph オブジェクトへの参照を持ち、src で使用される初期ボディーのコピーおよび src と同じ同時実行のしきい値を持ちます。src のプレデセッサーおよびサクセサーはコピーされせん。

新しいボディー・オブジェクトは、src の作成時に提供された元のボディーのコピー作成されます。src の作成後に src ボディーのメンバー変数に対して行われた変更は、新しい function_node. のボディーには影響しません。


bool try_put( const Input &v )

同時実行の制限が適用されると、受信メッセージ v に対するユーザー定義 body を実行します。それ以外の場合は、ノードのポリシーに応じて受信メッセージ v をキューに投入するか拒否します。

戻り値: 入力が受け付けられた場合は true、それ以外は false を返します。


bool try_get( Output &v )

戻り値: false

デダクション・ガイド


template <typename Body, typename Policy> 
function_node(graph&, size_t, Body, Policy, node_priority_t = no_priority) 
    ->function_node<std::decay_t<input_t<Body>>, output_t<Body>, Policy>; 

template <typename Body> 
function_node(graph&, size_t, Body, node_priority_t = no_priority) 
    ->function_node<std::decay_t<input_t<Body>>, output_t<Body>, /*default-policy*/>;

説明:

  • input_tBody 入力引数タイプのエイリアスです。

  • output_tBody 戻りタイプのエイリアスです。

データ・フロー・グラフの例は、function_node が入力データに対し計算を実行して結果をサクセサーに渡す方法を示しています。