A 2D tile-based sandbox game.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

log.h 1.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #pragma once
  2. #include <iostream>
  3. #include "OS.h"
  4. namespace Swan {
  5. class Logger {
  6. public:
  7. class NewlineStream {
  8. public:
  9. NewlineStream(std::ostream &os): os_(os) {}
  10. ~NewlineStream() {
  11. os_ << '\n' << std::flush;
  12. }
  13. template<typename T>
  14. NewlineStream &operator<<(const T &val) {
  15. os_ << val;
  16. return *this;
  17. }
  18. private:
  19. std::ostream &os_;
  20. };
  21. Logger(std::ostream &os, std::string name, bool use_color = false, std::string color = ""):
  22. os_(os), name_(std::move(name)), useColor_(use_color), color_(std::move(color)) {}
  23. template<typename T>
  24. NewlineStream operator<<(const T &val) {
  25. if (useColor_)
  26. os_ << color_ << name_ << "\033[0m: " << val;
  27. else
  28. os_ << name_ << ": " << val;
  29. return NewlineStream(os_);
  30. }
  31. private:
  32. std::ostream &os_;
  33. std::string name_;
  34. bool useColor_;
  35. std::string color_;
  36. };
  37. static std::ostream &logstream = std::clog;
  38. static Logger info(logstream, "info", OS::isTTY(stderr), "\033[36m");
  39. static Logger warn(logstream, "warning", OS::isTTY(stderr), "\033[33m");
  40. static Logger panic(logstream, "panic", OS::isTTY(stderr), "\033[1m\033[31m");
  41. }