#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() をオーバーライドすべきです。 パイプラインは、項目に対してほかのメソッドを呼び出しません。 戻り値: デフォルトの定義は効果がありません。 |