home *** CD-ROM | disk | FTP | other *** search
/ Game Audio Programming / GameAudioProgramming.iso / Game_Audio / audio_sdk / src / AudioLib / Errors.cpp < prev    next >
C/C++ Source or Header  |  2002-05-31  |  3KB  |  120 lines

  1. /***********************************************************\
  2. Copyright (C) James Boer, 2002. 
  3. All rights reserved worldwide.
  4.  
  5. This software is provided "as is" without express or implied
  6. warranties. You may freely copy and compile this source into
  7. applications you distribute provided that the copyright text
  8. below is included in the resulting source code, for example:
  9. "Portions Copyright (C) James Boer, 2002"
  10. \***********************************************************/
  11.  
  12. #include "Audio.h"
  13.  
  14. using namespace Audio;
  15.  
  16. #define MAX_ERROR_MESSAGES 1000
  17.  
  18. #define _countof(array) (sizeof(array)/sizeof(array[0]))
  19.  
  20. using namespace std;
  21.  
  22. std::list<std::string> Error::m_ErrorLog;
  23. std::list<std::string>::iterator Error::m_ErrorLogItor;
  24.  
  25.  
  26. //------------------------------------------------------------------------//
  27. bool Error::Handle(const char* lpszFormat, ...)
  28. {
  29.     va_list args;
  30.     va_start(args, lpszFormat);
  31.     int nBuf;
  32.     TCHAR szBuffer[512];
  33.  
  34.     if( lpszFormat )
  35.     {
  36.         nBuf = _vsntprintf(szBuffer, _countof(szBuffer), lpszFormat, args);
  37.         // was there an error? was the expanded string too long?
  38.         assert(nBuf >= 0);
  39.     }
  40.     else
  41.         szBuffer[0] = NULL;    // no string passed in.
  42.  
  43.     // store the error in the general error log (this will also print debug output)
  44.     Log(szBuffer);
  45.  
  46.     va_end(args);
  47.  
  48.     return false;
  49. }
  50.  
  51.  
  52. //------------------------------------------------------------------------//
  53. // Error error logging functions
  54. void Error::Log(const char* lpszFormat, ...)
  55. {
  56.     va_list args;
  57.     va_start(args, lpszFormat);
  58.     int nBuf;
  59.     TCHAR szBuffer[512];
  60.  
  61.     if( lpszFormat )
  62.     {
  63.         nBuf = _vsntprintf(szBuffer, _countof(szBuffer), lpszFormat, args);
  64.         // was there an error? was the expanded string too long?
  65.         assert(nBuf >= 0);
  66.     }
  67.     else
  68.         szBuffer[0] = NULL;    // no string passed in.
  69.  
  70.     m_ErrorLog.push_back(szBuffer);
  71.     DebugOut(1, szBuffer);
  72.  
  73.     // Limit the number of lines allowed in the log (defaults to 1000)
  74.     if(m_ErrorLog.size() > MAX_ERROR_MESSAGES)
  75.         m_ErrorLog.pop_front();
  76.  
  77.     va_end(args);
  78. }
  79.  
  80.  
  81. //------------------------------------------------------------------------//
  82. void Error::ClearLog()
  83. {
  84.     m_ErrorLog.clear();
  85. }
  86.  
  87.  
  88. //------------------------------------------------------------------------//
  89. const char* Error::GetFirst()
  90. {
  91.     if(m_ErrorLog.empty())
  92.         return NULL;
  93.     m_ErrorLogItor = m_ErrorLog.begin();
  94.     return (*m_ErrorLogItor).c_str();
  95. }
  96.  
  97.  
  98. //------------------------------------------------------------------------//
  99. const char* Error::GetNext()
  100. {
  101.     if(++m_ErrorLogItor == m_ErrorLog.end())
  102.         return NULL;
  103.     return (*m_ErrorLogItor).c_str();
  104. }
  105.  
  106. //------------------------------------------------------------------------//
  107. const char* Error::GetLast()
  108. {
  109. /*
  110.     if(m_ErrorLog.empty())
  111.         return NULL;
  112.     m_ErrorLogItor = m_ErrorLog.end();
  113.     m_ErrorLogItor--;
  114.     return (*m_ErrorLogItor).c_str();
  115. */
  116.     return NULL;
  117. }
  118.  
  119.  
  120.