+log::log(enum level level) :
+ level_(level)
+{
+ if (isatty(1) == 0)
+ switch (level)
+ {
+ case log::error: prefix_ = " error: "; break;
+ case log::warning: prefix_ = "warning: "; break;
+ case log::info: prefix_ = " info: "; break;
+ case log::none: break;
+ }
+ else
+ switch (level)
+ {
+ case log::error: prefix_ = "\033[101m error: "; break;
+ case log::warning: prefix_ = "\033[103mwarning: "; break;
+ case log::info: prefix_ = " info: "; break;
+ case log::none: break;
+ }
+}
+
+std::ostream& operator << (class log& log, log::endl_ endl)
+{
+ if (log::global_level_ < log.level_) return null_log;
+ if (isatty(1) == 0) return moof::log << std::endl;
+ else return moof::log << "\033[0m" << std::endl;
+}
+
+std::ostream& operator << (std::ostream& stream, log::endl_ endl)
+{
+ if (isatty(1) == 0) return stream << std::endl;
+ else return stream << "\033[0m" << std::endl;
+}
+
+
+std::ostream& log(std::cout);