priority_queue_node テンプレート・クラス

概要

T 型のメッセージの無制限バッファー。メッセージは優先度順に転送されます。

構文

template< typename T,
          typename Compare = std::less<T>,
          typename A = cache_aligned_allocator<T> >
class priority_queue_node;

ヘッダー

#include "tbb/flow_graph.h"

説明

priority_queue_node は、サクセサーセットの 1 つのサクセサーへ優先度順にメッセージを転送する graph_nodereceiver<T>sender<T> です。ノードに登録された順番で、サクセサーにメッセージが転送されます。サクセサーがメッセージを拒否すると、そのサクセサーはメッセージ・パッシング・プロトコルのポリシーに従ってサクセサーリストから削除され、セットの次のサクセサーが処理されます。これはサクセサーがメッセージを受け付けるまで、またはすべてのサクセサーが処理されるまで続行されます。サクセサーに転送されたアイテムはバッファーから削除されます。

Compare で決定された最も優先度の高いメッセージが次に転送されます。

priority_queue_node は予約可能で、一度に 1 つの予約をサポートします。priority_queue_node が予約されている間、ほかのアイテムはサクセサーに転送されず、try_get の呼び出しは false を返します。予約されている間も、try_puttrue を返し、priority_queue_node にアイテムを追加します。

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

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

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

注意

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

メンバー

namespace tbb {
namespace flow {
 
template< typename T, typename Compare = std::less<T>,
          typename A = cache_aligned_allocator<T>>
class priority_queue_node : public queue_node<T> {
public:
    typedef size_t size_type;
    priority_queue_node( graph &g );
    priority_queue_node( const priority_queue_node &src );
    ~priority_queue_node();
 
    // 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( );
};
 
}
}
次の表は、このテンプレート・クラスのメンバーの詳細な情報を提供します。
メンバー 説明
priority_queue_node( graph &g )

graph g に属する空の priority_queue_node を構築します。

priority_queue_node( const priority_queue_node &src )

src と同じ graph g に属する空の priority_queue_node を構築します。プレデセッサーのリスト、サクセサーのリスト、バッファーのメッセージはコピーされません。

bool try_put( const input_type &v )

priority_queue_nodev を追加します。v の優先度が現在バッファーに格納されているすべてのメッセージで最も高い場合、アイテムをサクセサーに転送するタスクがキューにスポーンされます。

戻り値: true

bool register_predecessor( predecessor_type &p )

値を拒否しないため、プレデセッサーのリストを維持する必要はありません。

戻り値: 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 )

戻り値: ノードに利用できるメッセージがありノードが予約されていない場合は true。その他の場合は false。ノードが true を返した場合、最も優先度の高いメッセージが v にコピーされます。

bool try_reserve( output_type &v )

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

戻り値: ノードに利用できるメッセージがありノードが予約されていない場合は true。その他の場合は false。ノードが true を返した場合、最も優先度の高いメッセージが v にコピーされます。

bool try_release( )

ノードの予約を解除します。最後に成功した try_reserve の呼び出しで返されたアイテムが priority_queue_node に残されます。

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

bool try_consume( )

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

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

関連情報