blob: 1878395aba348fb1404a9cd60dd3fc754d9d3d4b [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _OSL_DIAGNOSE_H_
#define _OSL_DIAGNOSE_H_
#include <sal/types.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* //////////////////////////////////////////////////////////////////////////
Diagnostic support
*/
void SAL_CALL osl_breakDebug(void);
sal_Bool SAL_CALL osl_assertFailedLine(const sal_Char* pszFileName, sal_Int32 nLine, const sal_Char* pszMessage);
void SAL_CALL osl_trace(const sal_Char* pszFormat, ...);
sal_Int32 SAL_CALL osl_reportError(sal_uInt32 nType, const sal_Char* pszErrorMessage);
/*
For message delivery
*/
/** a message delivery function which receives a pre-formatted message string
*/
typedef void (SAL_CALL *pfunc_osl_printDebugMessage)( const sal_Char * pszMessage );
/** a message delivery function which receives detailed information about where the message was triggered
*/
typedef void (SAL_CALL *pfunc_osl_printDetailedDebugMessage)( const sal_Char * pszFileName, sal_Int32 nLine, const sal_Char* pszMessage );
/** sets a message delivery function
The function set here is ignored if a function for detailed message information
(pfunc_osl_printDetailedDebugMessage) has been set.
The given message handler must be able to cope with a <NULL/> message.
*/
pfunc_osl_printDebugMessage SAL_CALL osl_setDebugMessageFunc( pfunc_osl_printDebugMessage pNewFunc );
/** sets a delivery function for detailed message information.
The given message handler must be able to cope with a <NULL/> message.
*/
pfunc_osl_printDetailedDebugMessage SAL_CALL osl_setDetailedDebugMessageFunc( pfunc_osl_printDetailedDebugMessage pNewFunc );
#ifdef __cplusplus
}
#endif
#define OSL_THIS_FILE __FILE__
/* the macro OSL_THIS_FUNC is intended to be an office internal macro for now */
#define OSL_THIS_FUNC "<unknown>"
/* the macro OSL_TO_STRING is intended to be an office internal macro for now */
#define OSL_TO_STRING( x ) #x
/* the macro OSL_MACRO_VALUE_TO_STRING is intended to be an office internal macro for now */
#define OSL_MACRO_VALUE_TO_STRING( x ) OSL_TO_STRING( x )
/* the macro OSL_LOG_PREFIX is intended to be an office internal macro for now */
#define OSL_LOG_PREFIX OSL_THIS_FILE ":" OSL_THIS_FUNC ":" OSL_MACRO_VALUE_TO_STRING( __LINE__ ) "; "
#define OSL_DEBUG_ONLY(s) _OSL_DEBUG_ONLY(s)
#define OSL_TRACE _OSL_TRACE
#define OSL_ASSERT(c) _OSL_ASSERT(c, OSL_THIS_FILE, __LINE__)
#define OSL_ENSURE(c, m) _OSL_ENSURE(c, OSL_THIS_FILE, __LINE__, m)
#define OSL_VERIFY(c) do { if (!(c)) OSL_ASSERT(0); } while (0)
#define OSL_PRECOND(c, m) OSL_ENSURE(c, m)
#define OSL_POSTCOND(c, m) OSL_ENSURE(c, m)
#ifdef __cplusplus
#define _OSL_GLOBAL ::
#else
#define _OSL_GLOBAL
#endif /* __cplusplus */
#ifdef _WIN16
#if OSL_DEBUG_LEVEL > 0
#undef OSL_DEBUG_LEVEL
#define OSL_DEBUG_LEVEL 0
#endif
#endif
#if OSL_DEBUG_LEVEL > 0
#define _OSL_DEBUG_ONLY(f) (f)
#define _OSL_ASSERT(c, f, l) \
do \
{ \
if (!(c) && _OSL_GLOBAL osl_assertFailedLine(f, l, 0)) \
_OSL_GLOBAL osl_breakDebug(); \
} while (0)
#define _OSL_ENSURE(c, f, l, m) \
do \
{ \
if (!(c) && _OSL_GLOBAL osl_assertFailedLine(f, l, m)) \
_OSL_GLOBAL osl_breakDebug(); \
} while (0)
#else
#define _OSL_DEBUG_ONLY(f) ((void)0)
#define _OSL_ASSERT(c, f, l) ((void)0)
#define _OSL_ENSURE(c, f, l, m) ((void)0)
#endif /* OSL_DEBUG_LEVEL */
#if OSL_DEBUG_LEVEL > 1
#define _OSL_TRACE _OSL_GLOBAL osl_trace
#else
#define _OSL_TRACE 1 ? ((void)0) : _OSL_GLOBAL osl_trace
#endif /* OSL_DEBUG_LEVEL */
#endif /* _OSL_DIAGNOSE_H_ */