hkOstreamLogger.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:4k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. #ifndef HK_BASE_OSTREAM_LOGGER_H
  9. #define HK_BASE_OSTREAM_LOGGER_H
  10. #include <Common/Base/DebugUtil/Logger/hkLogger.h>
  11. /// Logger which writes to an hkOstream
  12. class hkOstreamLogger : public hkLogger
  13. {
  14. public:
  15. /// Write to the given filename.
  16. hkOstreamLogger(const char* fname) : m_os(fname)
  17. {
  18. init();
  19. }
  20. /// Write to the given writer.
  21. hkOstreamLogger(hkStreamWriter* w) : m_os(w)
  22. {
  23. init();
  24. }
  25. /// Flushes buffers and all future output is directed to filename.
  26. void changeOutput(const char* filename)
  27. {
  28. flush();
  29. hkOstream tmp(filename);
  30. m_os.setStreamWriter(tmp.getStreamWriter());
  31. }
  32. /// Note that this will not produce output until a log message is recieved in this scope.
  33. virtual void pushScope(const char* s)
  34. {
  35. m_scopes.pushBack(s);
  36. }
  37. virtual void popScope()
  38. {
  39. if( m_printedScopeLevel == m_scopes.getSize() )
  40. {
  41. m_indent.popBack();
  42. m_indent.popBack();
  43. m_indent.back() = 0;
  44. if( m_scopes.back() )
  45. {
  46. m_os.printf("<  %s<<n", m_indent.begin());
  47. }
  48. --m_printedScopeLevel;
  49. }
  50. m_scopes.popBack();
  51. if( m_buffered == false )
  52. {
  53. flush();
  54. }
  55. }
  56. virtual void setThreshold(int level)
  57. {
  58. m_logThreshold = level;
  59. }
  60. virtual void flush()
  61. {
  62. m_os.flush();
  63. }
  64. protected:
  65. virtual void _log( int level, const char* fmt, hk_va_list args )
  66. {
  67. if( m_logThreshold <= level )
  68. {
  69. for( /**/; m_printedScopeLevel < m_scopes.getSize(); ++m_printedScopeLevel )
  70. {
  71. if( m_scopes[m_printedScopeLevel] )
  72. {
  73. m_os.printf(">  %s>>%sn", m_indent.begin(), m_scopes[m_printedScopeLevel]);
  74. }
  75. m_indent.back() = ' ';
  76. m_indent.pushBack(' ');
  77. m_indent.pushBack(0);
  78. }
  79. int sideIndex = hkMath::clamp<int>(level, 0, int(LOG_ERROR)) / 10;
  80. const char sidebar[][5] =
  81. {
  82. "   ",
  83. "   ",
  84. " . ",
  85. "-W-",
  86. "<E>"
  87. };
  88. m_os.printf("%s%s", sidebar[sideIndex], m_indent.begin());
  89. hkArray<char> buf; buf.setSize(256);
  90. hkString::vsnprintf(buf.begin(), buf.getSize(), fmt, args );
  91. m_os.printf("%sn", buf.begin());
  92. if( m_buffered == false )
  93. {
  94. m_os.flush();
  95. }
  96. }
  97. }
  98. /// If enabled, don't flush after every _log call.
  99. void setBuffered(hkBool b)
  100. {
  101. m_buffered = b;
  102. }
  103. protected:
  104. void init()
  105. {
  106. m_indent.pushBack(0);
  107. m_printedScopeLevel = 0;
  108. m_logThreshold = 0;
  109. setBuffered(false);
  110. }
  111. hkOstream m_os;
  112. hkArray<char> m_indent;
  113. hkArray<const char*> m_scopes;
  114. int m_printedScopeLevel; // scopes labels only printed when there is a message in scope
  115. int m_logThreshold;
  116. hkBool m_buffered;
  117. };
  118. #endif //HK_BASE_OSTREAM_LOGGER_H
  119. /*
  120. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  121. * Confidential Information of Havok.  (C) Copyright 1999-2009
  122. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  123. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  124. * rights, and intellectual property rights in the Havok software remain in
  125. * Havok and/or its suppliers.
  126. * Use of this software for evaluation purposes is subject to and indicates
  127. * acceptance of the End User licence Agreement for this product. A copy of
  128. * the license is included with this software and is also available at www.havok.com/tryhavok.
  129. */