#include "tbb/pipeline.h"
class filter;
filter は、pipeline 中のフィルターを表します。フィルターには 3 つのモードがあります。
filter のモードは、コンストラクターの引数で指定されます。並列処理による速度向上が見込めるため、可能な限り並列フィルターを使用します。シリアルフィルターでなければならない場合は、可能な限り処理順序に対する制約の少ない順不同のモードを使用します。
filter クラスは、pipeline クラスとともにのみ使用してください。
後にアイテムを入力順に処理しなければならない 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: explicit filter( mode ); }; }
メンバー | 説明 |
---|---|
explicit 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() をオーバーライドすべきです。パイプラインは、アイテムに対してほかのメソッドを呼び出しません。 戻り値: デフォルトの定義は効果がありません。 |