#include <CProcessingElement> class CProcessingElement { public: virtual ~CProcessingElement() {} virtual void operator()() = 0; virtual void process(void* pData, size_t nBytes) = 0; };
Processing elements contain flow of control that typically
accepts data, processes it and then sends resulting data to
a subsequent stage of the data processing pipeline.
Concrete CProcessingElements
often
construct with parameters that include a
CReceiver
to receive the data,
a CSender
to send processed data and a
CProcessor
to do the actual processing.
In the prototoypical processing element, the
operator()
method will use the objects'
CReceiver
to obtain work elements.
process
would then be called which
would, in turn, call the process
method of an encapsulated CProcessor
object.
operator()
would also be responsible
for knowing when the last work item has been received and
shutting down the object after that has been processed.
In a typical, application, an empty data item might be a flag
that there are no more data items and the processor's
process
would, in turn, be
responsible for notifying subsequent stages of the computation,
if appropriate.
Concrete classes must implement both
operator()
and
process
.
virtual = 0 void operator()();
This method is supposed to implement the flow of control of the processing element. Normally this is a loop with the logic like the pseudocode below
virtual =0 void process(void* pData, size_t nBytes);
Processes a work item of data received by
operator()
. Normally,
implementations of this method have the form: