From bcb3ca77dcc55553db3b798bc0d1bc35ca98704b Mon Sep 17 00:00:00 2001 From: Joseph Mirabel <jmirabel@laas.fr> Date: Fri, 31 Jan 2020 10:12:24 +0100 Subject: [PATCH] Enhance interface of RealTimeLogger and RTLoggerStream --- include/dynamic-graph/real-time-logger.h | 29 ++++++++++++++++-------- src/debug/real-time-logger.cpp | 6 ----- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/include/dynamic-graph/real-time-logger.h b/include/dynamic-graph/real-time-logger.h index 373979f..d2a4111 100644 --- a/include/dynamic-graph/real-time-logger.h +++ b/include/dynamic-graph/real-time-logger.h @@ -7,12 +7,10 @@ #include <sstream> #include <vector> -#include <boost/circular_buffer.hpp> #include <boost/shared_ptr.hpp> #include <boost/thread/mutex.hpp> #include <dynamic-graph/config.hh> -#include <dynamic-graph/debug.h> namespace dynamicgraph { /// \ingroup debug @@ -50,22 +48,30 @@ class RealTimeLogger; /// This class is only used by RealTimeLogger. class RTLoggerStream { public: - RTLoggerStream(RealTimeLogger *logger, std::ostream &os) - : logger_(logger), os_(os) {} + inline RTLoggerStream(RealTimeLogger *logger, std::ostream &os) + : ok_(logger!=NULL), logger_(logger), os_(os) {} template <typename T> inline RTLoggerStream &operator<<(T t) { - if (logger_ != NULL) - os_ << t; + if (ok_) os_ << t; return *this; } inline RTLoggerStream &operator<<(std::ostream &(*pf)(std::ostream &)) { - if (logger_ != NULL) - os_ << pf; + if (ok_) os_ << pf; return *this; } - ~RTLoggerStream(); + inline ~RTLoggerStream() { + if (ok_) { + os_ << std::ends; + logger_->frontReady(); + } + } + + inline bool isNull() { + return !ok_; + } private: + const bool ok_; RealTimeLogger *logger_; std::ostream &os_; }; @@ -119,6 +125,11 @@ public: /// The message is considered finished when the object is destroyed. RTLoggerStream front(); + /// Return an empty stream object. + RTLoggerStream emptyStream() { + return RTLoggerStream(NULL, oss_); + } + inline void frontReady() { backIdx_ = (backIdx_ + 1) % buffer_.size(); wmutex.unlock(); diff --git a/src/debug/real-time-logger.cpp b/src/debug/real-time-logger.cpp index 2489134..8f18971 100644 --- a/src/debug/real-time-logger.cpp +++ b/src/debug/real-time-logger.cpp @@ -59,12 +59,6 @@ RTLoggerStream RealTimeLogger::front() { return RTLoggerStream(this, oss_); } -RTLoggerStream::~RTLoggerStream() { - os_ << std::ends; - if (logger_ != NULL) - logger_->frontReady(); -} - struct RealTimeLogger::thread { bool requestShutdown_; int threadPolicy_; -- GitLab