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
はグローバルの順番を適用し、先行するすべてのメッセージの前に “優先順位の低い” メッセージを通過させることはありません。