source_node クラス

概要

graph_node および sender<Output> のテンプレート・クラス。このノードにはプレデセッサーはありません。ユーザー定義 body 関数オブジェクトを実行して、すべてのサクセサーにブロードキャストされるメッセージを生成します。このノードはシリアルノードで、body を同時に呼び出しません。1 つのアイテムをバッファーに格納できます。生成されたアイテムを受け付けるサクセサーがない場合、新しいアイテムが生成される前のサクセサーに提供されます。

構文

template < typename Output > class source_node;

ヘッダー

#include "tbb/flow_graph.h"

説明

このノードは、ユーザー定義 body を呼び出して Output 型のメッセージを生成し、結果をすべてのサクセサーにブロードキャストします。

source_node はシリアルノードです。body の呼び出しは同時に行われません。

source_node は、bodyfalse を返すか有効なサクセサーがなくなるまで、body の呼び出しとメッセージのブロードキャストを続行します。メッセージが生成された後、すべてのサクセサーで拒否される場合があります。この場合、メッセージはバッファーに格納され、サクセサーがノードに追加されるか try_get が呼び出されると、次のメッセージが送られます。try_get の呼び出しは、メッセージがバッファーに格納されている場合はそのメッセージを返します。格納されていない場合は body を呼び出して新しいメッセージを生成しようとします。body の呼び出しは内部バッファーが空の場合のみ行われます。

サクセサーがメッセージを拒否した場合、「メッセージ・パッシング・プロトコル」で説明されているプロトコルを使用して処理されます。

Output は、コピー構築可能および代入可能でなければなりません。

source_node<Output> ボディーコンセプト

擬似署名

意味

B::B( const B& )

コピー・コンストラクター。

B::~B()

デストラクター。

void operator=( const B& )

代入。擬似署名の戻り型 void は、operator= は値を返す必要がないことを示します。operator= は値を返すことができますが無視されます。

bool B::operator() (Output &v)

新しい値を v に代入した場合は true を返します。新しい値を生成しない場合は false を返します。

注意

source_node に渡されるボディー・オブジェクトはコピーされます。そのため、メンバー変数を更新してもノードを構築するために使用されたオリジナルのオブジェクトには影響しません。ノードの外部からボディー・オブジェクト内に保持されている状態を調査しなければならない場合は、copy_body 関数を使用して更新されたコピーを取得します。

ボディー・オブジェクトは、そのエンクロージング・グラフをスローまたはキャンセルすることがあります。詳細は、「task_group_context」および「例外」を参照してください。

メンバー

namespace tbb {
namespace flow {
 
template < typename Output >
class source_node : public graph_node, public sender< Output > {
public:
    typedef Output output_type;
    typedef receiver< output_type > successor_type;
 
    template< typename Body >
    source_node( graph &g, Body body, bool is_active = true );
    source_node( const source_node &src );
    ~source_node();
 
    void activate();
    bool register_successor( successor_type &r );
    bool remove_successor( successor_type &r );
    bool try_get( output_type &v );
    bool try_reserve( output_type &v );
    bool try_release( );
    bool try_consume( );
};
 
}
}
次の表は、このクラスのメンバーの詳細な情報を提供します。
メンバー 説明
template< typename Body >source_node( graph &g, Body body, bool is_active=true )

body を呼び出す source_node を構築します。デフォルトでは、ノードはアクティブ状態で作成され、直ちにメッセージの生成を開始します。is_activefalse の場合、activate に対する呼び出しが行われるまでメッセージは生成されません。

source_node( const source_node &src )

src の構築時の状態と同じ初期状態で source_node を構築します。構築される source_node には、src と同じ graph オブジェクトへの参照、src で使用される初期 body のコピー、src と同じ初期アクティブ状態が含まれます。src のプレデセッサーおよびサクセサーはコピーされません。

注意

新しいボディー・オブジェクトは、src の構築時に提供されたオリジナルのボディーのコピーからコピー構築されます。このため、src の構築後に src のボディーのメンバー変数に対して行われた変更は、新しい source_node のボディーに影響しません。

void activate()

source_node をアクティブ状態に設定して、メッセージの生成を開始できるようにします。

bool register_successor( successor_type &r )

サクセサーのセットに r を追加します。

戻り値: true

bool remove_successor( successor_type &r )

サクセサーのセットから r を削除します。

戻り値: true

bool try_get( output_type &v )

メッセージがバッファーに格納されている場合はそのメッセージを v にコピーします。格納されていない場合は body を呼び出して v にコピーされる新しいメッセージを生成しようとします。

戻り値:メッセージが v にコピーされた場合は true。その他の場合は false

bool try_reserve( output_type &v )

可能な場合、source_node を予約します。メッセージがバッファーに格納可能でノードが予約されていない場合、ノードが呼び出し元に対して予約され、値が v にコピーされます。

戻り値: ノードが呼び出し元に対して予約された場合は true。その他の場合は false

bool try_release( )

source_node で保持されている予約を解除します。内部バッファーで保持されているメッセージは保持されたままです。

戻り値: true

bool try_consume( )

source_node で保持されている予約を解除して内部バッファーをクリアします。

戻り値: true

関連情報