hxsym_leaveutil.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:3k
源码类别:

Symbian

开发平台:

Visual C++

  1. /************************************************************************
  2.  * hxsym_leaveutil.h.
  3.  * -------------
  4.  *
  5.  * Synopsis:
  6.  *
  7.  *
  8.  * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
  9.  *
  10.  ************************************************************************/
  11. #ifndef hxsym_leaveutil_h
  12. #define hxsym_leaveutil_h
  13. // sdk includes
  14. #include <e32std.h>
  15. // helix includes
  16. #include "hxassert.h"
  17. //
  18. // XXXLCM
  19. //
  20. // In some instances gcc appends an underscore to symbol names that
  21. // externally reference the first member of a namespace if that member
  22. // is a function. That is, in object files that reference the function 
  23. // the symbol name has a trailing underscore appended to it; in the object
  24. // file that defines the function, the symbol name does not have the trailing
  25. // underscore in its name.
  26. //
  27. // This works around that by declaring a bogus, unlikely name as the
  28. // first member.
  29. //
  30. #define NAMESPACE_FIRST_MEMBER_FIX void englebert_humperdinck();
  31. namespace hxsym
  32. {
  33. NAMESPACE_FIRST_MEMBER_FIX
  34. void DoLeaveErrorMsgL(const char* pszFile, int line, TInt err);
  35. inline
  36. void Leave(TInt err, const char* pszFile, int line)
  37. {
  38.     DoLeaveErrorMsgL(pszFile, line, err);
  39.     User::Leave(err);
  40. }
  41. inline
  42. void LeaveIfError(TInt err, const char* pszFile, int line)
  43. {
  44.     if( KErrNone != err )
  45.     {
  46.         Leave(err, pszFile, line);
  47.     }
  48. }
  49. inline 
  50. void LeaveIfFalse(bool cond, const char* pszFile, int line)
  51. {
  52.     HX_ASSERT(cond);
  53.     if(!cond)
  54.     {
  55. Leave(KErrGeneral, pszFile, line);
  56.     }
  57. }
  58. inline
  59. void LeaveIfTrue(bool cond, const char* pszFile, int line)
  60. {
  61.     LeaveIfFalse(!cond, pszFile, line);
  62. }
  63. } // ns hxsym
  64. #define HXSYM_LEAVE(err)            hxsym::Leave(err, __FILE__, __LINE__)
  65. #define HXSYM_LEAVE_IF_ERR(err)     hxsym::LeaveIfError(err, __FILE__, __LINE__)
  66. #define HXSYM_LEAVE_IF_TRUE(cond)   hxsym::LeaveIfTrue(cond, __FILE__, __LINE__)
  67. #define HXSYM_LEAVE_IF_FALSE(cond)  hxsym::LeaveIfFalse(cond, __FILE__, __LINE__)
  68. #if defined(NO_LEAVE_MESSAGE) //XXXLCM support these (no message) versions as well
  69. inline
  70. void Leave(TInt err)
  71. {
  72.     User::Leave(err);
  73. }
  74. inline
  75. void LeaveIfError(TInt err)
  76. {
  77.     HX_ASSERT(err != KErrNone);
  78.     User::LeaveIfError(err);
  79. }
  80. inline
  81. void LeaveIfTrue(bool cond)
  82. {
  83.     LeaveIfFalse(!cond);
  84. }
  85. inline
  86. void LeaveIfFalse(bool cond)
  87. {
  88.     HX_ASSERT(cond);
  89.     if(!cond)
  90.     {
  91. User::Leave(KErrGeneral);
  92.     }
  93. }
  94. ///////////////////////////////////
  95. /*
  96. template<class T>
  97. inline
  98. T* LeaveIfNull(T *p)
  99. {
  100.     HX_ASSERT(p != 0);
  101.     User::LeaveIfNull(p);
  102.     return p;
  103. }
  104. template<class T>
  105. inline
  106. const T* LeaveIfNull(const T *p)
  107. {
  108.     HX_ASSERT(p != 0);
  109.     User::LeaveIfNull(p);
  110.     return p;
  111. }
  112. */
  113. #define HXSYM_LEAVE(err)            hxsym::Leave(err)
  114. #define HXSYM_LEAVE_IF_ERR(err)     hxsym::LeaveIfError(err)
  115. #define HXSYM_LEAVE_IF_TRUE(cond)   hxsym::LeaveIfTrue(cond)
  116. #define HXSYM_LEAVE_IF_FALSE(cond)  hxsym::LeaveIfFalse(cond)
  117. #endif // NO_LEAVE_MESSAGE
  118. #endif //hxsym_leaveutil_h