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_nodereceiver<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)

vpriority_queue_node に追加し、ノードに追加されていますが、まだサクセサーに転送されていない項目から最も優先順位が高い項目をサクセサーに転送します。

戻り値: true

bool try_get(T &v)

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

利用シナリオは sequencer_node に似ていますが、priority_queue_node はローカスで順序付けを行い、その時点で保存されている最も優先順位の高いメッセージを渡すことが異なります。また、sequencer_node はグローバルの順番を適用し、先行するすべてのメッセージの前に “優先順位の低い” メッセージを通過させることはありません。