Т8
Size: a a a
Т8
🎄T
.
.
🎄T
AS
.
Т8
.
.
.
AS
Т8
🎄T
std::accumulate(std::begin(cont), std::end(cont), “”s)
.
.
std::accumulate(std::begin(cont), std::end(cont), “”s)
AS
.
v
s
class SerialLogger : public ILogging, public Singleton<SerialLogger> {
public:
typedef std::ostream &(*ManipFn)(std::ostream &);
typedef std::ios_base &(*FlagsFn)(std::ios_base &);
SerialLogger();
template <class T> &operator<<(const T &output) {
lock();
_stream_buf << output;
unlock();
return *this;
}
SerialLogger &operator<<(ManipFn manip){
lock();
manip(_stream_buf);
if (manip == static_cast<ManipFn>(std::flush) ||
manip == static_cast<ManipFn>(std::endl)) {
this->flush();
}
unlock();
return *this;
}
SerialLogger &operator<<(FlagsFn manip)
{
lock();
manip(_stream_buf);
unlock();
return *this;
}
SerialLogger &operator()(TraceLevel_t e) {
lock();
_logLevel = e;
unlock();
return *this;
}
void flush();
virtual ~SerialLogger();
bool is_available(void) const override;
protected:
virtual void lock(void) { _mutex.lock(); };
virtual void unlock(void) { _mutex.unlock(); };
private:
Stream &_serial;
Mutex _mutex;
std::stringstream _stream_buf;
TraceLevel_t _logLevel;
};