Creating the Filter’s Body Class
The filter's implementation must derive from
RWTraceSingleClientFilterImp, for a single-client filter, or
RWTraceMultiClientFilterImp, for a multiple-client filter.
The doTrace() function. You specify the rules for filtering by redefining the
doTrace() member function, which is inherited from
RWTraceEventClientImp. The
RWTraceEventClientImp::doTrace() function is declared pure-virtual, so a derived body class must provide an implementation of this function.
For a single-client filter, check that the event meets your filter’s criteria and forward it to the connected client, using the
trace() member function.
Example 56 is taken from the source code for
RWTraceLevelFilterImp.
Example 56 – Creating a single-client filter
void
RWTraceLevelFilterImp::doTrace(const RWTraceEvent& ev) {
if (getClient() && (level_ >= ev.getSeverity()) )
getClient()->trace(ev);
}
For a multi-client filter, iterate over the connected clients and selectively forward the trace events, based on your filter's criteria.
Example 57 is taken from the source code for
RWTraceMultiClientFilterImp.
Example 57 – Creating a multi-client filter
void
RWTraceMultiClientFilterImp::doTrace(const RWTraceEvent& ev) {
{
RWGUARD(getMutex());
for(unsigned i=0; i < clientPs_.length(); i++ )
clientPs_(i)->trace(ev);
}
}
NOTE: Do not embed trace macros in the filter’s trace event processing code. To prevent infinite recursion, the trace manager ignores any trace events generated by a filter.
The static make() function. If you are using the predefined handle class, your body class must supply a static
make() function. (If you are creating a derived handle class, you can skip to
Creating the Filter’s Handle Class .) The
make() function constructs a body and returns a handle to it. This example is taken from the source code for
RWTraceLevelFilterImp.
Example 58 – Creating a filter body class to use with the predefined handle class
RWTraceSingleClientFilter
RWTraceLevelFilterImp::make(RWTraceEventSeverity level) {
return new RWTraceLevelFilterImp(level);
}
NOTE: The returned handle's type is actually the parent class of your derived handle.