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
は、body
が fc.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_node
はsrc
と同じ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_t
はBody
入力引数タイプのエイリアスです。