#include "tbb/pipeline.h"
class filter;
filter は、pipeline(0) 中のフィルターを表します。フィルターには 3 つのモードがあります。
filter のモードは、コンストラクターの引数で指定されます。並列処理による速度向上が見込めるため、可能な限り並列フィルターを使用します。シリアルフィルターでなければならない場合は、可能な限り処理順序に対する制約の少ない順不同のモードを使用します。
filter クラスは、pipeline(0) クラスとともにのみ使用してください。
後に項目を入力順に処理しなければならない serial_in_order ステージがある場合は、serial_in_order 入力フィルターを使用します。
インテル® TBB 2.0 以前では、並列入力ステージをシリアルとして扱っていました。 それ以降のバージョンでは、並列入力ステージを並列に実行できます。そのため、並列入力ステージを指定する場合は、operator() がスレッドセーフでなければなりません。
namespace tbb { class filter { public: enum mode { parallel = implementation-defined, serial_in_order = implementation-defined, serial_out_of_order = implementation-defined }; bool is_serial() const; bool is_ordered() const; virtual void* operator()( void* item ) = 0; virtual void finalize( void* item ) {} virtual ~filter(); protected: filter( mode ); }; }
メンバー | 説明 |
---|---|
filter( mode filter_mode ) |
指定されたモードのフィルターを構築します。 注インテル® TBB 2.1 以前にも、bool 引数 is_serial を持つ同様のコンストラクターがありました。このコンストラクターはまだありますが、推奨されていません (付録の「互換性機能」を参照)。 |
~filter() |
フィルターを破棄します。フィルターが pipeline 中にある場合は、自動的にパイプラインから削除されます。 |
bool is_serial() const |
戻り値: フィルターモードが parallel の場合は false、その他の場合は true。 |
bool is_ordered() const |
戻り値: フィルターモードが serial_in_order の場合は false、その他の場合は true。 |
virtual void* operator()( void * item ) |
派生したフィルターは、項目を処理して、次の filter によって処理される項目へのポインターを返すようにこのメソッドをオーバーライドします。パイプラインの最初のフィルターの項目引数は NULL です。 戻り値: 処理する項目がない場合、pipeline の最初のフィルターは NULL を返します。パイプラインの最後のフィルターの結果は無視されます。 |
virtual void finalize( void * item ) |
パイプラインは、ユーザー要求または例外によって中止できます。パイプラインが中止されると、フィルターの operator() によって、次のフィルターでまだ処理されていない項目が返されることがあります。パイプラインが中止された場合、次のフィルターは、operator() の代わりに、各項目に対して finalize() を呼び出します。operator() とは異なり、finalize() メソッドは、さらに処理を行えるように項目を返しません。派生フィルターは、項目に対して適切なクリーンアップを実行するように finalize() をオーバーライドすべきです。パイプラインは、項目に対してほかのメソッドを呼び出しません。 戻り値: デフォルトの定義は効果がありません。 |