priority_queue_node
[flow_graph.priority_queue_node]
メッセージを優先順に転送するクラス・テンプレート。
// <oneapi/tbb/flow_graph.h> ヘッダーで定義
namespace oneapi {
namespace tbb {
namespace flow {
template< typename T, typename Compare = std::less<T>>
class priority_queue_node : public graph_node, public receiver<T>, public sender<T> {
public:
explicit priority_queue_node( graph &g );
priority_queue_node( const priority_queue_node &src );
~priority_queue_node();
bool try_put( const T &v );
bool try_get( T &v );
};
} // namespace flow
} // namespace tbb
} // namespace oneapi要件:
Tタイプは、[copyconstructible] の CopyConstructible の要件と、[copyassignable] ISO C++ 標準の CopyAssignable の要件を満たしている必要があります。Compareタイプは、[alg.sorting] ISO C++ 標準の Compare タイプの要件を満たしている必要があります。ここでCompareインスタンスが例外をスローすると、動作は未定義となります。
次に転送されるメッセージは、Compare テンプレート引数で決定される最大の優先順位を持ちます。
priority_queue_node は、graph_node、receiver<T>、および sender<T> です。
priority_queue_node には、バッファリング と シングルプッシュ プロパティーがあります。
メンバー関数
- explicit priority_queue_node(graph &g)
グラフ
gに属する空のpriority_queue_nodeを構築します。
- priority_queue_node(const priority_queue_node &src)
srcと同じグラフgに属する空のpriority_queue_nodeを構築します。先行および後続へのリンクを含むsrcの中間状態はコピーされません。
- bool try_put(const T &v)
vをpriority_queue_nodeに追加し、ノードに追加されていますが、まだサクセサーに転送されていない項目から最も優先順位が高い項目をサクセサーに転送します。戻り値:
true
- bool try_get(T &v)
戻り値: ノードに利用できるメッセージがありノードが予約されていない場合は
trueを返します。それ以外はfalseを返します。ノードがtrueを返した場合、最も優先度の高いメッセージがvにコピーされます。
例
利用シナリオは sequencer_node に似ていますが、priority_queue_node はローカスで順序付けを行い、その時点で保存されている最も優先順位の高いメッセージを渡すことが異なります。また、sequencer_node はグローバルの順番を適用し、先行するすべてのメッセージの前に “優先順位の低い” メッセージを通過させることはありません。
