Outline
Purpose
Provide a helper for implementing the ball::Observer protocol.
Classes
- See also
- ball_observer, ball_record, ball_context
Description
This component provides a single class ball::ObserverAdapter that aids in the implementation of the ball::Observer protocol by allowing clients to implement that protocol by implementing a single method signature: publish(const ball::Record&, const ball::Context&). A primary goal of this component is to simplify the transition for older implementations of the ball::Observer protocol (that accept const-references to ball::Record objects) to the updated protocol (that accepts shared-pointers to ball::Record objects). ball::ObserverAdapter inherits from ball::Observer, and implements the (newer) overload of the publish method in (accepting a shared-pointer to a record) by calling the overload of the publish method (accepting a reference to a record).
Usage
This section illustrates intended use of this component.
Example 1: Concrete Observer Derived From ball::ObserverAdapter
The following code fragments illustrate the essentials of defining and using a concrete observer inherited from ball::ObserverAdapter.
First define a concrete observer MyOstreamObserver derived from ball::ObserverAdapter that declares a single publish method accepting a const-reference to a ball::Record object:
bsl::ostream *d_stream;
public:
explicit MyOstreamObserver(bsl::ostream *stream) : d_stream(stream) { }
virtual ~MyOstreamObserver();
using Observer::publish;
};
Definition ball_context.h:295
Definition ball_observeradapter.h:189
void publish(const Record &record, const Context &context) BSLS_KEYWORD_OVERRIDE=0
Definition ball_record.h:178
Then, we implement the public methods of MyOstreamObserver, including the publish method. This implementation of publish simply prints out the content of the record it receives to the stream supplied at construction.
MyOstreamObserver::~MyOstreamObserver()
{
}
{
const int numCustomFields = customFields.
length();
for (int i = 0; i < numCustomFields; ++i) {
*d_stream << customFields[i] << ' ';
}
*d_stream << '\n' << bsl::flush;
}
Definition ball_recordattributes.h:274
int lineNumber() const
Return the line number attribute of this record attributes object.
Definition ball_recordattributes.h:599
const bdlt::Datetime & timestamp() const
Return the timestamp attribute of this record attributes object.
Definition ball_recordattributes.h:635
bsls::Types::Uint64 threadID() const
Return the threadID attribute of this record attributes object.
Definition ball_recordattributes.h:617
const char * category() const
Return the category attribute of this record attributes object.
Definition ball_recordattributes.h:587
int processID() const
Return the processID attribute of this record attributes object.
Definition ball_recordattributes.h:605
const char * message() const
const char * fileName() const
Return the filename attribute of this record attributes object.
Definition ball_recordattributes.h:593
ball::UserFields & customFields()
Definition ball_record.h:414
RecordAttributes & fixedFields()
Return the modifiable fixed fields of this log record.
Definition ball_record.h:396
Definition ball_userfields.h:136
int length() const
Return the number of user field values in this object.
Definition ball_userfields.h:406
Now, we defined a function main in which we create a MyOstreamObserver object and assign the address of this object to a ball::ObserverAdapter pointer:
int main(bool verbose)
{
MyOstreamObserver myObserver(&out);
Definition bslstl_ostringstream.h:175
Finally, publish three messages by calling publish method accepting a shared-pointer, provided by ball::ObserverAdapter, that in turn will call the publish method defined in MyOstreamObserver:
const int NUM_MESSAGES = 3;
for (int n = 0; n < NUM_MESSAGES; ++n) {
fixedFields,
customFields);
n,
NUM_MESSAGES));
}
if (verbose) {
bsl::cout << out.
str() << bsl::endl;
}
return 0;
}
void setTimestamp(const bdlt::Datetime ×tamp)
Definition ball_recordattributes.h:580
Definition bdlt_datetime.h:331
void str(const StringType &value)
Definition bslstl_ostringstream.h:581
Definition bslstl_sharedptr.h:1830
void createInplace()
Definition bslstl_sharedptr.h:5448
@ e_TRIGGER
Definition ball_transmission.h:215
static Datetime utc()
Definition bdlt_currenttime.h:296
static Allocator * allocator(Allocator *basicAllocator=0)
Definition bslma_default.h:897
The above code fragments print to stdout like this:
Publish a sequence of three messages.
22FEB2012_00:12:12.000 201 31 0
22FEB2012_00:12:12.000 202 32 0
22FEB2012_00:12:12.000 203 33 0