SuperElectric
SuperElectric

Reputation: 18914

How to monitor streams in c++

Often when writing file writers or parsers in c++, I would like to monitor the writer/parser's progress through the file as it gets written/read. To this end, I was thinking of implementing something like:

ostream_monitor my_monitor(&my_output_stream, &cout);
my_monitor << my_variable;

This would have the effect of outputting my_variable to my_output_stream, and also to cout, so I can see it.

Likewise, it'd be nice to have an input version of the same:

istream_monitor my_monitor(&my_input_stream, &cout);
my_monitor >> my_variable;

This would read the next token off of my_input_stream, and use it to set my_variable, but also output any read characters to cout, so I can see the stream as it gets read.

I could go ahead and try to make subclasses of std::istream and std::ostream which do this, but it seems like potentially a lot of engineering for a debug tool that may or may not be useful. I am therefore prompted to ask:

What do you do to monitor the progress of a parser through a file? I am interested in hearing any solutions that seem simpler to implement than the one above.

Upvotes: 1

Views: 495

Answers (1)

SuperElectric
SuperElectric

Reputation: 18914

Seems like boost.IOStreams' tee_device, and possibly tee_filter, can be used to quickly implement what I describe above: How can I compose output streams, so output goes multiple places at once?

Upvotes: 1

Related Questions