input_node

[flow_graph.input_node]

ユーザー定義ファンクターを呼び出してメッセージを生成し、結果をすべてのサクセサーにブロードキャストするノード。


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

namespace oneapi { 
namespace tbb { 
namespace flow { 

    template < typename Output > 
    class input_node : public graph_node, public sender<Output> { 
    public: 
        template< typename Body > 
        input_node( graph &g, Body body ); 
        input_node( const input_node &src ); 
        ~input_node(); 

        void activate(); 
        bool try_get( Output &v ); 
    }; 

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

要件:

  • Output タイプは、[defaultconstructible] の DefaultConstructible 要件、[copyconstructible] の CopyConstructible 要件、および [copyassignable] ISO C++ 標準の CopyAssignable 要件を満たす必要があります。

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

このノードにはプレディセッサー (先行) はありません。ユーザー定義 body 関数オブジェクトを実行して、すべてのサクセサー (後続) にブロードキャストされるメッセージを生成します。このノードはシリアルノードで、body を同時に呼び出しません。また、ノードは単一の項目をバッファリングできます。生成された項目を受け取るサクセサーがない場合、メッセージはバッファリングされ、新しい項目が生成される前にサクセサーに提供されます。

input_node は、graph_node および sender<Output> です。

input_node には、バッファリングbroadcast-push プロパティーがあります。

input_node は、bodyfc.stop() をトグルするか、有効なサクセサーがなくなるまで body を呼び出してメッセージのブロードキャストを続行します。生成されたメッセージは、すべてのサクセサーで拒否される場合があります。この場合、メッセージはバッファーに格納され、サクセサーがノードに追加されるか try_get が呼び出されると、次に送信されるメッセージになります。try_get を呼び出すと、バッファーにメッセージが格納されている場合はそのメッセージを返します。格納されていない場合は body を呼び出して新しいメッセージの生成を試みます。body の呼び出しはバッファーが空の場合のみ行われます。

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

メンバー関数

template<typename Body>
input_node(graph &g, Body body)

body を呼び出す input_node を構築します。デフォルトではノードはインアクティブ状態で作成され、アクティブ化されるまでメッセージは生成されません。

input_node(const input_node &src)

src の作成時の状態と同じ初期状態で input_node を作成します。作成される input_nodesrc と同じ graph オブジェクトへの参照を持ち、src で使用される初期ボディーのコピーおよび src, と同じ初期アクティブ状態が含まれます。src のサクセサーはコピーされせん。

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

void activate()

input_node をアクティブ状態にします。これによりメッセージの送信が可能になります。

bool try_get(Output &v)

可能であれば、メッセージをバッファーから v にコピーします。または、ノードがアクティブであれば、body を呼び出して v にコピーする新しいメッセージを作成します。

戻り値: メッセージが v にコピーされる場合は true、それ以外は false を返します。

デダクション・ガイド


template <typename Body> 
input_node(graph&, Body) -> input_node<std::decay_t<input_t<Body>>>;

説明:

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