GameErrors.h
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:2k
源码类别:

游戏

开发平台:

Visual C++

  1. /*******************************************************************
  2.  *         Advanced 3D Game Programming using DirectX 7.0
  3.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  4.  *   Title: GameErrors.h
  5.  *    Desc: errors that game functions can have
  6.  *          
  7.  * copyright (c) 1999 by Adrian Perez
  8.  * See license.txt for modification and distribution information
  9.  ******************************************************************/
  10. #ifndef _GAMEERRORS_H
  11. #define _GAMEERRORS_H
  12. #include <string>
  13. #include "GameGlobals.h"
  14. //==========--------------------------  
  15. /**
  16.  * This code is slow, using dynamic memory, but since we only use them
  17.  * when something Really Bad happens, the user won't notice that their
  18.  * application exits abmornally a few nanoseconds slower than usual
  19.  */
  20. class cGameError
  21. {
  22. std::string m_errorText;
  23. public:
  24. cGameError( const char* errorText )
  25. {
  26. DP1("***n*** [ERROR] cGameError thrown! text: [%s]n***n", errorText );
  27. m_errorText = std::string( errorText );
  28. }
  29. const char* GetText()
  30. {
  31. return m_errorText.c_str();
  32. }
  33. };
  34. //==========--------------------------  
  35. enum eResult
  36. {
  37. resAllGood = 0, // function passed with flying colors
  38. resFalse = 1, // function worked and returns value 'false'
  39. resFailed = -1, // function failed miserably
  40. resNotImpl = -2, // function has not been implemented
  41. resForceDWord = 0x7FFFFFFF
  42. };
  43. inline bool Succeeded( eResult in )
  44. {
  45. if( in >= 0 )
  46. return true;
  47. return false;
  48. }
  49. inline bool Failed( eResult in )
  50. {
  51. if( in < 0 )
  52. return true;
  53. return false;
  54. }
  55. /**
  56.  * The Right Way to release our COM interfaces.
  57.  * If they're still valid, release them, then
  58.  * invalidate them.
  59.  */
  60. template <class T>
  61. inline void SafeRelease( T& iface )
  62. {
  63. if( iface )
  64. {
  65. iface->Release();
  66. iface = NULL;
  67. }
  68. }
  69. /**
  70.  * Make sure the release brings our refcount to 0.
  71.  */
  72. template <class T>
  73. inline void ExtraSafeRelease( T& iface )
  74. {
  75. long refCount = 0;
  76. if( iface )
  77. {
  78. if( 0 < ( refCount = iface->Release() ) )
  79. {
  80. DP0("[ExtraSafeRelease]: ERROR: Interface was not released enough!");
  81. }
  82. iface = NULL;
  83. }
  84. }
  85. #endif //_GAMEERRORS_H