sequencer_node テンプレート・クラス

概要

T 型のメッセージの無制限バッファー。 メッセージはシーケンス順に転送されます。

構文

template< typename T, typename A = cache_aligned_allocator<T> >
class sequencer_node;

ヘッダー

#include "tbb/flow_graph.h"

説明

sequencer_node は、後続 (successor) セットの 1 つの後続へシーケンス順にメッセージを転送する graph_nodereceiver<T>sender<T> です。 ノードに登録された順で、後続にメッセージが転送されます。 後続がメッセージを拒否すると、その後続はメッセージ・パッシング・プロトコルのポリシーに従って後続リストから削除され、セットの次の後続が試されます。 この処理は後続がメッセージを受け取るまで、またはすべての後続が試されるまで続行されます。 後続に転送された項目はバッファーから削除されます。

sequencer_node から渡される各項目は、シーケンサーのオーダー番号によって順序が決められます。 これらのシーケンス・オーダー番号の範囲は 0 から N (N は size_t 型で表現可能な最も大きな整数) です。 項目のシーケンサー・オーダー番号は、下記のように、シーケンサー・コンセプトをモデル化するユーザー定義関数オブジェクトに項目を渡すことにより決定されます。

sequencer_node<T> シーケンサー・コンセプト

擬似署名

意味

S::S( const S& )

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

S::~S()

デストラクター。

void operator=( const S& )

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

size_t S::operator()( const T &v )

提供されたメッセージ v のシーケンス番号を返します。

sequencer_node は予約可能で、一度に 1 つの予約をサポートします。 sequencer_node が予約されている間、ほかの項目は後続に転送されず、try_get の呼び出しは false を返します。 予約されている間も、try_puttrue を返し、sequencer_node に項目を追加します。

A 型のアロケーターが、sequencer_node に内部メモリーを割り当てるために使用されます。

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

後続がメッセージを拒否した場合、メッセージ・パッシング・プロトコルを使用して処理されます (詳細は、以下のリンクを参照)。

メンバー

namespace tbb {
namespace flow {
 
template< typename T, typename A = cache_aligned_allocator<T> >
class sequencer_node :
  public queue_node<T> {
public:
    template< typename Sequencer >
    sequencer_node( graph &g, const Sequencer &s );
    sequencer_node( const sequencer_node &src );
 
    // receiver<T>
    typedef T input_type;
    typedef sender<input_type> predecessor_type;
    bool try_put( const input_type &v );
    bool register_predecessor( predecessor_type &p );
    bool remove_predecessor( predecessor_type &p );
 
    // sender<T>
    typedef T output_type;
    typedef receiver<output_type> successor_type;
    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 Sequencer> sequencer_node( graph& g, const Sequencer &s )

graph g に属し、項目のシーケンス番号の計算に s を使用する空の sequencer_node を構築します。

警告

Sequencer 関数オブジェクトは例外をスローしてはなりません。

sequencer_node( const sequencer_node &src )

src と同じ graph g に属し、src の構築に使用された Sequencer s のコピーを使用する空の sequencer_node を構築します。 先行 (predecessor) のリスト、後続のリスト、バッファーのメッセージはコピーされません。

警告

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

bool try_put( const input_type &v )

sequencer_nodev を追加します。 v のシーケンス番号がシーケンスの次の項目の場合、項目を後続に転送するタスクがキューに入れられます。

戻り値: true

bool register_predecessor( predecessor_type &p )

値を拒否しないため、先行 (predecessor) のリストを維持する必要はありません。

戻り値: false

bool remove_predecessor( predecessor_type &p )

値を拒否しないため、先行のリストを維持する必要はありません。

戻り値: false

bool register_successor( successor_type &r )

後続のセットに r を追加します。

戻り値: true

bool remove_successor( successor_type &r )

後続のセットから r を削除します。

戻り値: true

bool try_get( output_type &v )

戻り値: シーケンスの次の項目が sequencer_node で利用可能な場合は true。 その場合、その項目はノードから削除され、v に代入されます。 シーケンサー・オーダーの次の項目が利用できない場合、またはノードが予約されている場合は false

bool try_reserve( output_type &v )

呼び出しで true が返された場合、ノードは予約され、予約が解除または消費されるまでメッセージは転送されません。

戻り値: シーケンサー・オーダーの次の項目が sequencer_node で利用可能な場合は true。 その場合、その項目は v に代入されますが、sequencer_node から削除されません。 シーケンサー・オーダーの次の項目が利用できない場合、またはノードが予約されている場合は false

bool try_release( )

ノードの予約を解除します。最後に成功した try_reserve の呼び出しで返された項目が sequencer_node に残されます。

戻り値: バッファーが現在予約されている場合は true。その他の場合は false

bool try_consume( )

ノードの予約を解除します。最後に成功した try_reserve の呼び出しで返された項目がキューの先頭からポップされます。

戻り値: バッファーが現在予約されている場合は true。その他の場合は false

関連情報