// Description: Logger class
// Detail: An abstract base class for reporting logging information
// Documentation: loggers.txt
#ifndef PASTELSYS_LOGGER_FWD_H
#define PASTELSYS_LOGGER_FWD_H
#include <string>
#include <unordered_set>
namespace Pastel
{
class Log;
class Logger
{
public:
// Using default constructor.
// Using default copy constructor.
// Using default assignment.
// Using default destructor.
virtual ~Logger();
void swap(Logger& that);
//! Write a string.
virtual Logger& operator<<(
const std::string& value) = 0;
//! Frees any resources.
/*!
This is called, for example, before aborting
program execution via an assertion. With this
function the logger has the chance to close
a file or flush the contents of a stream.
*/
virtual void finalize() = 0;
private:
friend class Log;
//! Add a log to the set of observer logs.
void addLog(Log* log);
//! Remove a log from the set of observer logs.
void removeLog(Log* log);
using LogSet = std::unordered_set<Log*>;
using Log_Iterator = LogSet::iterator;
using Log_ConstIterator = LogSet::const_iterator;
//! The set of observer logs.
LogSet logSet_;
};
}
#endif