⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hxassert.h

📁 著名的 helix realplayer 基于手机 symbian 系统的 播放器全套源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/* ***** BEGIN LICENSE BLOCK ***** 
 * Version: RCSL 1.0/RPSL 1.0 
 *  
 * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
 *      
 * The contents of this file, and the files included with this file, are 
 * subject to the current version of the RealNetworks Public Source License 
 * Version 1.0 (the "RPSL") available at 
 * http://www.helixcommunity.org/content/rpsl unless you have licensed 
 * the file under the RealNetworks Community Source License Version 1.0 
 * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
 * in which case the RCSL will apply. You may also obtain the license terms 
 * directly from RealNetworks.  You may not use this file except in 
 * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
 * applicable to this file, the RCSL.  Please see the applicable RPSL or 
 * RCSL for the rights, obligations and limitations governing use of the 
 * contents of the file.  
 *  
 * This file is part of the Helix DNA Technology. RealNetworks is the 
 * developer of the Original Code and owns the copyrights in the portions 
 * it created. 
 *  
 * This file, and the files included with this file, is distributed and made 
 * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
 * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
 * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
 * 
 * Technology Compatibility Kit Test Suite(s) Location: 
 *    http://www.helixcommunity.org/content/tck 
 * 
 * Contributor(s): 
 *  
 * ***** END LICENSE BLOCK ***** */ 

/////////////////////////////////////////////////////////////////////////////
// HXASSERT.H
//
// Debugging support header.
//
// HX_ASSERT()	- asserts an expression is TRUE. Compiles to no-ops in
//				retail builds. Provides message box or other UI when 
//				expression fails.
//
// HX_ASSERT_VALID_PTR() - asserts that a pointer is valid. Performs more
//				rigid verification specifically appropriate for pointers.
//
// HX_VERIFY()	- verifies an expression is TRUE. Expression or code DOES NOT 
//				compile away in retail builds, but UI of failure is removed.
//				In debug builds provides message box or other UI when 
//				expression fails.
//
// HX_TRACE()	- Similar to DEBUGPRINTF() but no buffer is required. 
//				Compiles to no-ops in retail builds.
//

#ifndef _HXASSERT_H_
#define _HXASSERT_H_

#include "hlxclib/assert.h"

#ifndef ASSERT
#if defined (DEBUG) || defined (_DEBUG)
#if defined (_OSF1) && defined (_NATIVE_COMPILER)
#	define ASSERT(x)	assert(((long)(x)) != 0L)
#else
#       define ASSERT(x)        assert(x)
#endif
#else
#	define ASSERT(x)	/* x */
#endif /* DEBUG */
#endif /* ndef ASSERT */

#include "hlxclib/limits.h"
#include "hxtypes.h"
#include "hxresult.h"           // for HX_RESULT
#include "hlxclib/stdio.h"      // for sprintf

#ifdef _SUN
#include <stddef.h>     // for size_t
#endif

#ifdef __cplusplus
extern "C" {
#endif

#if defined (_SOLARIS) || defined (_IRIX) || defined (_DECALPHA)
#ifndef __inline
#define __inline inline
#endif
#endif

#if defined (_OSF1) && defined (_NATIVE_COMPILER)
#if defined __cplusplus
#define __inline inline
#else
#define __inline static
#endif /* __cplusplus */
#endif

#ifdef _HPUX 
#if defined __cplusplus
#define __inline inline
#else
#define __inline 
#endif /* __cplusplus */
#endif

#if defined _AIX
#if defined __cplusplus
#define __inline inline
#else
#define __inline 
#endif /* __cplusplus */
#endif /* _AIX */

#ifdef _UNIX
#include <signal.h> /* For kill() */
#include <unistd.h> /* For getpid() */
#include <stdio.h>
void HXUnixDebugBreak();
#endif


/////////////////////////////////////////////////////////////////////////////
// Diagnostic support

// For _MAX_PATH
#if defined ( _MACINTOSH )
#include "platform/mac/maclibrary.h"
#elif defined (_UNIX)
#include <stdlib.h>
#if !defined(_VXWORKS)
#include <sys/param.h>
#endif
#define _MAX_PATH       MAXPATHLEN
#elif defined (_WINDOWS)
#include <stdlib.h>
#endif

#ifdef _SYMBIAN
# include <unistd.h>
# define _MAX_PATH MAXPATHLEN
#endif

#ifdef _OPENWAVE
#ifndef _MAX_PATH
#define _MAX_PATH 256
#endif
#endif

#if defined (DEBUG) || defined (_DEBUG)

#ifdef _MACINTOSH
#  define MAX_TRACE_OUTPUT  255
#else
# ifdef _UNIX
#  define MAX_TRACE_OUTPUT  255
# elif _WIN16
#  define MAX_TRACE_OUTPUT  255
# elif _SYMBIAN
#  define MAX_TRACE_OUTPUT  255
# else
#  define MAX_TRACE_OUTPUT  (_MAX_PATH*2 + 20)
# endif
#endif


/////////////////////////////////////////////////////////////////////////////
//
//	HXDebugOptionEnabled: 
//		Determine if the given debug option is enabled.
//		A lookup is done to the registry key, and if it's present
//		and set to '1', TRUE is returned otherwise FALSE
//		Similar to HXWantTraceMessages, except not specific to one option.
#ifdef _WIN16
// The STDMETHODCALLTYPE includes the _export keyword, even though this is
// a static, not dll, library.  Seems to work on win32 ok, but not a win16
// .exe.  rpapp would see this as duplicate symbol, until the _export was
// removed, and all the libraries that rpapp linked with rebuilt.  There
// may be a define for STDMETHODCALLTYPE without the _export that should be
// used here. XXXTW.  april 98.
BOOL far _cdecl HXDebugOptionEnabled(const char* szOption);
#else
BOOL STDMETHODCALLTYPE HXDebugOptionEnabled(const char* szOption);
#endif

/////////////////////////////////////////////////////////////////////////////
//
//	HXWantTraceMessages: 
//		Helper function used to determine if the system has asked for trace 
//		messages.
//
BOOL STDMETHODCALLTYPE HXWantTraceMessages();

/////////////////////////////////////////////////////////////////////////////
//
//	HXOutputDebugString: 
//		Helper function used by DEBUGOUTSTR(). This is better than 
//		OutputDebugString, because it will check to see if output
//		tracing is turned off in the registry. This prevents the massive
//		slew of output messages.
//
void STDMETHODCALLTYPE HXOutputDebugString(const char* pString);

/////////////////////////////////////////////////////////////////////////////
//
// HXTrace: Helper function used by HX_TRACE()
//
void STDMETHODVCALLTYPE HXTrace(const char* pszFormat, ...);


/////////////////////////////////////////////////////////////////////////////
//
// HXAssertFailedLine: Helper function used by HX_ASSERT()
//
#ifdef _WIN16
// The STDMETHODCALLTYPE includes the _export keyword, even though this is
// a static, not dll, library.  Seems to work on win32 ok, but not a win16
// .exe.  rpapp would see this as duplicate symbol, until the _export was
// removed, and all the libraries that rpapp linked with rebuilt.  There
// may be a define for STDMETHODCALLTYPE without the _export that should be
// used here. XXXTW.  april 98.
BOOL far _cdecl HXAssertFailedLine(const char* pszExpression, const char* pszFileName, int nLine);
#else
BOOL STDMETHODCALLTYPE HXAssertFailedLine(const char* pszExpression, const char* pszFileName, int nLine);
#endif

/////////////////////////////////////////////////////////////////////////////
//
// HXAssertValidPointer, HXIsValidAddress: Helper functions used by
// HX_ASSERT_VALID_PTR()
//
void STDMETHODCALLTYPE HXAssertValidPointer(const void* pVoid, const char* pszFileName, int nLine);
#ifdef __cplusplus
#ifdef _WIN16
    // see note above on the problem with STDMETHODCALLTYPE on win16
    BOOL far _cdecl        HXIsValidAddress(const void* lp, ULONG32 nBytes = 1, BOOL bReadWrite = TRUE);
#else
    BOOL STDMETHODCALLTYPE HXIsValidAddress(const void* lp, ULONG32 nBytes = 1, BOOL bReadWrite = TRUE);
#endif
#else
#ifdef _WIN16
    // see note above on the problem with STDMETHODCALLTYPE on win16
    BOOL far _cdecl        HXIsValidAddress(const void* lp, ULONG32 nBytes, BOOL bReadWrite);
#else
    BOOL STDMETHODCALLTYPE HXIsValidAddress(const void* lp, ULONG32 nBytes, BOOL bReadWrite);
#endif
#endif

#ifdef _WIN16
BOOL far _cdecl        HXIsValidString(const char* lpsz, int nLength);
#else
BOOL STDMETHODCALLTYPE HXIsValidString(const char* lpsz, int nLength);
#endif

/////////////////////////////////////////////////////////////////////////////
//
// HXDebugBreak: used to break into debugger at critical times
//
#ifndef HXDebugBreak
// by default, debug break is asm int 3, or a call to DebugBreak, or nothing

#if defined(_WINDOWS)
#if !defined(_M_IX86)
#include "windows.h"
#define HXDebugBreak() DebugBreak()
#else
#define HXDebugBreak() _asm { int 3 }
#endif // _M_ALPHA
#elif defined( _MACINTOSH )
#define HXDebugBreak() Debugger()
#elif defined(_OPENWAVE)
#if defined(_OPENWAVE_SIMULATOR) // windows app...
#define HXDebugBreak() _asm { int 3 }
#else
void HXDebugBreak();
#endif
#elif defined(_SYMBIAN)
#if defined(__WINS__)
#define HXDebugBreak() _asm { int 3 }
#else
void HXDebugBreak();
#endif //_SYMBIAN
#elif  defined(_UNIX)
void HXDebugBreak();
#elif defined(_VXWORKS)
#include <taskLib.h>
#define HXDebugBreak() (taskSuspend(taskIdSelf()))

#endif // end of#if defined(_WIN32) || defined(_WINDOWS)

#endif // end of#ifndef HXDebugBreak

#ifdef _UNIX
#include "signal.h"
#include "stdlib.h"

#define HX_ENABLE_JIT_DEBUGGING()               \
do {						\
    signal (SIGSEGV, (void (*)(int))HXDebugBreak);		\
    signal (SIGBUS,  (void (*)(int))HXDebugBreak);		\
    signal (SIGFPE,  (void (*)(int))HXDebugBreak);		\
    if (!getenv("PROCESS_NAME"))                \
    {                                           \
    char *progname = new char[strlen(argv[0]) + 30]; \
    sprintf(progname, "PROCESS_NAME=%s", argv[0]); /* Flawfinder: ignore */ \
    putenv(progname);                           \
    } \
} while (0);
#else
#define HX_ENABLE_JIT_DEBUGGING()
#endif

/////////////////////////////////////////////////////////////////////////////
//
// HXAbort: used to shut down the application at critical times
//
#ifndef HXAbort

#if (defined(_WIN32) || defined(_WINDOWS)) && !defined(WIN32_PLATFORM_PSPC)
# define HXAbort() 	abort()
#elif defined(WIN32_PLATFORM_PSPC)
# define HXAbort()   exit(1)
#elif defined(_SYMBIAN)
# define HXAbort() exit(1)
#elif defined(_OPENWAVE)
// XXXSAB is this right??
# define HXAbort() exit(1)
#elif defined ( _MACINTOSH )
# define HXAbort() DebugStr("\pHXAbort: Please exit this program.")
#elif defined ( _UNIX )
# define HXAbort() printf("\npnabort: Please exit this program.\n")
#endif // end of#if defined(_WIN32) || defined(_WINDOWS)

#endif // end of#ifndef HXAbort


/////////////////////////////////////////////////////////////////////////////
//
// HX_TRACE: see above.
//
#define HX_TRACE			::HXTrace

/////////////////////////////////////////////////////////////////////////////
//
// HX_ASSERT: see above.
//
#define HX_ASSERT(f) \
	do \
	{ \
	if (!(f) && HXAssertFailedLine(#f, __FILE__, __LINE__)) \
		HXDebugBreak(); \
	} while (0) \


#define REQUIRE_REPORT(targ,file,line)	HXAssertFailedLine(targ,file,line)




/////////////////////////////////////////////////////////////////////////////
//
//	Macros Defined for logging messges in the player. 
//  
//  STARTLOGSINK: Query for an IHXErrorSink
//
//  LOGINFO: Report the error to the error sink
//
//  STOPLOGSINK: Shutdown and Release the error sink.	       
//
/////////////////////////////////////////////////////////////////////////////
#ifndef _GOLD

#ifndef _INTERFACE

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -