A filter
represents a filter in a pipeline
. A filter is parallel
or serial
. A parallel filter can process multiple items in parallel and possibly out of order. A serial filter processes items one at a time in the original stream order. Parallel filters are preferred when viable because they permit parallel speedup. Whether the filter is serial or parallel is specified by an argument to the constructor.
The filter
class should be used only in conjunction with pipeline
.
namespace tbb { class filter { protected: filter( bool is_serial ); public: bool is_serial() const; virtual void* operator()( void* item ) = 0; virtual ~filter(); }; }
filter(bool is_serial)
Effects: constructs a serial filter if is_serial
is true
, or a parallel filter if is_serial
is false
.
~filter()
Effects: destroys the filter. The filter must not be in a pipeline; otherwise, memory might be corrupted. The debug version of the library raises an assertion failure if the filter is in a pipeline. Always clear or destroy the containing pipeline first. A way to remember this is that a pipeline acts like a container of filters, and a C++ container usually does not allow one to destroy an item while it is in the container.
boolis_serial()const
Returns: true
if filter
is serial; false
if filter
is parallel
.
virtual void*operator()(void *item)
Effects: the derived filter should override this method to process an item and return a pointer to item
to be processed by the next filter. The item
parameter is NULL
for the first filter in the pipeline.
Returns: the first filter in a pipeline should return NULL
if there are no more items to process. The result of the last filter in a pipeline is ignored.
18.227.0.192