Add new timestamped_file class

This adds a "timestamped_file" subclass of ui_file.  This class adds a
timestamp to its output when appropriate.  That is, it follows the
rule already used in vfprintf_unfiltered of adding a timestamp at most
once per write.

The new class is not yet used.
This commit is contained in:
Tom Tromey 2021-12-31 11:44:19 -07:00
parent 8b1931b394
commit 3c6c449e30
4 changed files with 57 additions and 1 deletions

View file

@ -25,6 +25,7 @@
#include "gdbsupport/gdb_select.h"
#include "gdbsupport/filestuff.h"
#include "cli/cli-style.h"
#include <chrono>
null_file null_stream;
@ -449,3 +450,31 @@ no_terminal_escape_file::puts (const char *buf)
if (*buf != '\0')
this->stdio_file::write (buf, strlen (buf));
}
void
timestamped_file::write (const char *buf, long len)
{
if (debug_timestamp)
{
/* Print timestamp if previous print ended with a \n. */
if (m_needs_timestamp)
{
using namespace std::chrono;
steady_clock::time_point now = steady_clock::now ();
seconds s = duration_cast<seconds> (now.time_since_epoch ());
microseconds us = duration_cast<microseconds> (now.time_since_epoch () - s);
std::string timestamp = string_printf ("%ld.%06ld ",
(long) s.count (),
(long) us.count ());
m_stream->puts (timestamp.c_str ());
}
/* Print the message. */
m_stream->write (buf, len);
m_needs_timestamp = (len > 0 && buf[len - 1] == '\n');
}
else
m_stream->write (buf, len);
}