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入力引数タイプのエイリアスです。
