Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 
 

109 строки
2.1 KiB

  1. //
  2. // Lol Engine
  3. //
  4. // Copyright: (c) 2010-2014 Sam Hocevar <sam@hocevar.net>
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the Do What The Fuck You Want To
  7. // Public License, Version 2, as published by Sam Hocevar. See
  8. // http://www.wtfpl.net/ for more details.
  9. //
  10. #include <lol/engine-internal.h>
  11. #include <cstdio>
  12. #if defined(_WIN32)
  13. # define WIN32_LEAN_AND_MEAN
  14. # include <windows.h>
  15. #endif
  16. #if defined(__ANDROID__)
  17. # include <android/log.h>
  18. # include <unistd.h> /* for gettid() */
  19. #else
  20. # include <cstdarg>
  21. #endif
  22. namespace lol
  23. {
  24. /*
  25. * Public Log class
  26. */
  27. void Log::Debug(char const *fmt, ...)
  28. {
  29. va_list ap;
  30. va_start(ap, fmt);
  31. Helper(DebugMessage, fmt, ap);
  32. va_end(ap);
  33. }
  34. void Log::Info(char const *fmt, ...)
  35. {
  36. va_list ap;
  37. va_start(ap, fmt);
  38. Helper(InfoMessage, fmt, ap);
  39. va_end(ap);
  40. }
  41. void Log::Warn(char const *fmt, ...)
  42. {
  43. va_list ap;
  44. va_start(ap, fmt);
  45. Helper(WarnMessage, fmt, ap);
  46. va_end(ap);
  47. }
  48. void Log::Error(char const *fmt, ...)
  49. {
  50. va_list ap;
  51. va_start(ap, fmt);
  52. Helper(ErrorMessage, fmt, ap);
  53. va_end(ap);
  54. }
  55. /*
  56. * Private helper function
  57. */
  58. void Log::Helper(MessageType type, char const *fmt, va_list ap)
  59. {
  60. #if defined __ANDROID__
  61. int const prio[] =
  62. {
  63. ANDROID_LOG_DEBUG,
  64. ANDROID_LOG_INFO,
  65. ANDROID_LOG_WARN,
  66. ANDROID_LOG_ERROR
  67. };
  68. String buf = String::VPrintf(fmt, ap);
  69. __android_log_print(prio[type], "LOL", "[%d] %s", (int)gettid(), &buf[0]);
  70. #else
  71. char const *prefix[] =
  72. {
  73. "DEBUG",
  74. "INFO",
  75. "WARN",
  76. "ERROR",
  77. };
  78. # if defined _WIN32
  79. String buf = String(prefix[type]) + ": " + String::VPrintf(fmt, ap);
  80. array<WCHAR> widechar;
  81. widechar.Resize(buf.Count() + 1);
  82. MultiByteToWideChar(CP_UTF8, 0, buf.C(), (int)buf.Count() + 1, widechar.Data(), (int)widechar.Count());
  83. OutputDebugStringW(widechar.Data());
  84. # else
  85. fprintf(stderr, "%s: ", prefix[type]);
  86. vfprintf(stderr, fmt, ap);
  87. # endif
  88. #endif
  89. }
  90. } /* namespace lol */