diff options
author | Pixel <pixel@nobis-crew.org> | 2011-10-03 14:48:05 -0700 |
---|---|---|
committer | Pixel <pixel@nobis-crew.org> | 2011-10-03 14:48:05 -0700 |
commit | 342b273234405ab76dc159d2e402bfb1ddfa1d8f (patch) | |
tree | f10d6857960313d6fc3b0aaa325ed46b8ad481fb /src/Printer.cc |
First commit - very basic features.
Diffstat (limited to 'src/Printer.cc')
-rw-r--r-- | src/Printer.cc | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/Printer.cc b/src/Printer.cc new file mode 100644 index 0000000..fda9952 --- /dev/null +++ b/src/Printer.cc @@ -0,0 +1,60 @@ +#include "Printer.h" +#include "Main.h" +#include "Local.h" + +class PrinterLocal : public Balau::Local { + public: + PrinterLocal() { } + Balau::Printer * getGlobal() { return reinterpret_cast<Balau::Printer *>(Local::getGlobal()); } + Balau::Printer * get() { return reinterpret_cast<Balau::Printer *>(Local::get()); } + void setGlobal(Balau::Printer * printer) { Local::setGlobal(printer); } + void set(Balau::Printer * printer) { Local::set(printer); } +} printerLocal; + +static const char * prefixes[] = { + "(DD) ", + "(II) ", + "(--) ", + "(WW) ", + "(EE) ", + "(AA) ", +}; + +Balau::Printer::Printer() : m_verbosity(M_STATUS | M_WARNING | M_ERROR) { + if (!printerLocal.getGlobal()) + printerLocal.setGlobal(this); +} + +Balau::Printer * Balau::Printer::getPrinter() { return printerLocal.get(); } + +void Balau::Printer::_log(uint32_t level, const char * fmt, va_list ap) { + if (!(level & m_verbosity)) + return; + + int l, i; + + for (l = M_MAX, i = (sizeof(prefixes) / sizeof(*prefixes)) - 1; l; l >>= 1, i--) + if (l & level) + break; + + print(prefixes[i]); + print(fmt, ap); + print("\n"); +} + +void Balau::Printer::_print(const char * fmt, va_list ap) { + vfprintf(stderr, fmt, ap); +} + +class DefaultPrinter : public Balau::AtStart { + public: + DefaultPrinter() : AtStart(10) { } + protected: + virtual void doStart(); +}; + +static DefaultPrinter defaultPrinter; + +void DefaultPrinter::doStart() { + new Balau::Printer(); +} |