BsLog.cpp 993 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include "BsLog.h"
  2. #include "BsException.h"
  3. namespace BansheeEngine
  4. {
  5. LogEntry::LogEntry(const String& msg, UINT32 channel)
  6. :mMsg(msg), mChannel(channel)
  7. { }
  8. Log::Log()
  9. {
  10. }
  11. Log::~Log()
  12. {
  13. BS_LOCK_RECURSIVE_MUTEX(mMutex);
  14. for(auto iter = mEntries.begin(); iter != mEntries.end(); ++iter)
  15. bs_delete(*iter);
  16. }
  17. void Log::logMsg(const String& message, UINT32 channel)
  18. {
  19. BS_LOCK_RECURSIVE_MUTEX(mMutex);
  20. LogEntry* newEntry = bs_new<LogEntry>(message, channel);
  21. mEntries.push_back(newEntry);
  22. mUnreadEntries.push(newEntry);
  23. }
  24. void Log::clear()
  25. {
  26. BS_LOCK_RECURSIVE_MUTEX(mMutex);
  27. for(auto iter = mEntries.begin(); iter != mEntries.end(); ++iter)
  28. bs_delete(*iter);
  29. mEntries.clear();
  30. while (!mUnreadEntries.empty())
  31. mUnreadEntries.pop();
  32. }
  33. bool Log::getUnreadEntry(LogEntry& entry)
  34. {
  35. BS_LOCK_RECURSIVE_MUTEX(mMutex);
  36. if (mUnreadEntries.empty())
  37. return false;
  38. entry = *mUnreadEntries.front();
  39. mUnreadEntries.pop();
  40. return true;
  41. }
  42. }