129 lines
4.6 KiB
C++
129 lines
4.6 KiB
C++
/*
|
|
* PROPRIETARY INFORMATION. This software is proprietary to
|
|
* Side Effects Software Inc., and is not to be reproduced,
|
|
* transmitted, or disclosed in any way without written permission.
|
|
*
|
|
* COMMENTS:
|
|
*/
|
|
|
|
#ifndef __HAPI_API_h__
|
|
#define __HAPI_API_h__
|
|
|
|
// Helper macros.
|
|
#if defined( __GNUC__ )
|
|
#define HAPI_IS_GCC_GE( MAJOR, MINOR ) \
|
|
( __GNUC__ > MAJOR || (__GNUC__ == MAJOR && __GNUC_MINOR__ >= MINOR) )
|
|
#else
|
|
#define HAPI_IS_GCC_GE( MAJOR, MINOR ) 0
|
|
#endif // defined( __GNUC__ )
|
|
#define HAPI_TO_STRING_( a ) # a
|
|
#define HAPI_TO_STRING( a ) HAPI_TO_STRING_( a )
|
|
|
|
// Mark function as deprecated and may be removed in the future.
|
|
// @note This qualifier can only appear in function declarations.
|
|
#ifdef HAPI_SUPPRESS_DEPRECATIONS
|
|
#define HAPI_DEPRECATED( hapi_ver, houdini_ver )
|
|
#define HAPI_DEPRECATED_REPLACE( hapi_ver, houdini_ver, replacement )
|
|
#elif defined( GCC3 )
|
|
#if HAPI_IS_GCC_GE( 4, 6 ) || defined( __clang__ )
|
|
#define HAPI_DEPRECATED( hapi_ver, houdini_ver ) \
|
|
__attribute__( ( deprecated( \
|
|
"Deprecated since version HAPI " HAPI_TO_STRING( hapi_ver ) \
|
|
", Houdini " HAPI_TO_STRING( houdini_ver ) ) ) )
|
|
#define HAPI_DEPRECATED_REPLACE( hapi_ver, houdini_ver, replacement ) \
|
|
__attribute__( ( deprecated( \
|
|
"Deprecated since version HAPI " HAPI_TO_STRING( hapi_ver ) \
|
|
", Houdini " HAPI_TO_STRING( houdini_ver ) ". Use " \
|
|
HAPI_TO_STRING( replacement ) " instead." ) ) )
|
|
#else
|
|
#define HAPI_DEPRECATED( hapi_ver, houdini_ver ) \
|
|
__attribute__( ( deprecated ) )
|
|
#define HAPI_DEPRECATED_REPLACE( hapi_ver, houdini_ver, replacement ) \
|
|
__attribute__( ( deprecated ) )
|
|
#endif
|
|
#elif defined( _MSC_VER )
|
|
#define HAPI_DEPRECATED( hapi_ver, houdini_ver ) \
|
|
__declspec( deprecated( \
|
|
"Deprecated since version HAPI " HAPI_TO_STRING( hapi_ver ) \
|
|
", Houdini " HAPI_TO_STRING( houdini_ver ) ) )
|
|
#define HAPI_DEPRECATED_REPLACE( hapi_ver, houdini_ver, replacement ) \
|
|
__declspec( deprecated( \
|
|
"Deprecated since version HAPI " HAPI_TO_STRING( hapi_ver ) \
|
|
", Houdini " HAPI_TO_STRING( houdini_ver ) ". Use " \
|
|
HAPI_TO_STRING( replacement ) " instead." ) )
|
|
#else
|
|
#define HAPI_DEPRECATED( hapi_ver, houdini_ver )
|
|
#define HAPI_DEPRECATED_REPLACE( hapi_ver, houdini_ver, replacement )
|
|
#endif
|
|
|
|
#if defined( WIN32 ) && !defined( MAKING_STATIC )
|
|
#define HAPI_VISIBILITY_EXPORT __declspec( dllexport )
|
|
#define HAPI_VISIBILITY_IMPORT __declspec( dllimport )
|
|
#define HAPI_VISIBILITY_EXPORT_TINST HAPI_VISIBILITY_EXPORT
|
|
#define HAPI_VISIBILITY_IMPORT_TINST HAPI_VISIBILITY_IMPORT
|
|
#elif defined(__GNUC__) && HAPI_IS_GCC_GE( 4, 2 ) && !defined( MAKING_STATIC )
|
|
#define HAPI_VISIBILITY_EXPORT __attribute__( ( visibility( "default" ) ) )
|
|
#define HAPI_VISIBILITY_IMPORT __attribute__( ( visibility( "default" ) ) )
|
|
#define HAPI_VISIBILITY_EXPORT_TINST
|
|
#define HAPI_VISIBILITY_IMPORT_TINST
|
|
#else
|
|
#define HAPI_VISIBILITY_EXPORT
|
|
#define HAPI_VISIBILITY_IMPORT
|
|
#define HAPI_VISIBILITY_EXPORT_TINST
|
|
#define HAPI_VISIBILITY_IMPORT_TINST
|
|
#endif
|
|
|
|
#ifdef HAPI_EXPORTS
|
|
#define HAPI_API HAPI_VISIBILITY_EXPORT
|
|
#else
|
|
#define HAPI_API HAPI_VISIBILITY_IMPORT
|
|
#endif // HAPI_EXPORTS
|
|
|
|
#if defined( WIN32 )
|
|
#define HAPI_CALL __cdecl
|
|
#else
|
|
#define HAPI_CALL
|
|
#endif // defined( WIN32 )
|
|
|
|
#ifdef __cplusplus
|
|
#define HAPI_EXTERN_C extern "C"
|
|
#else
|
|
#define HAPI_EXTERN_C
|
|
#endif // __cplusplus
|
|
|
|
#define HAPI_RETURN HAPI_Result HAPI_CALL
|
|
|
|
#define HAPI_DECL_RETURN( r ) HAPI_EXTERN_C HAPI_API r HAPI_CALL
|
|
#define HAPI_DECL_DEPRECATED( hapi_ver, houdini_ver ) \
|
|
HAPI_EXTERN_C \
|
|
HAPI_DEPRECATED( hapi_ver, houdini_ver ) \
|
|
HAPI_API \
|
|
HAPI_RETURN
|
|
#define HAPI_DECL_DEPRECATED_REPLACE( hapi_ver, houdini_ver, replacement ) \
|
|
HAPI_EXTERN_C \
|
|
HAPI_DEPRECATED_REPLACE( hapi_ver, houdini_ver, replacement ) \
|
|
HAPI_API \
|
|
HAPI_RETURN
|
|
|
|
#define HAPI_DECL HAPI_EXTERN_C HAPI_API HAPI_RETURN
|
|
#define HAPI_DEF HAPI_EXTERN_C HAPI_RETURN
|
|
|
|
// Static asserts
|
|
#ifdef __cplusplus
|
|
#define HAPI_STATIC_ASSERT( cond, msg ) \
|
|
template< bool b > \
|
|
struct HAPI_StaticAssert_##msg {}; \
|
|
template<> \
|
|
struct HAPI_StaticAssert_##msg< true > \
|
|
{ \
|
|
typedef int static_assert_##msg; \
|
|
}; \
|
|
typedef HAPI_StaticAssert_##msg< ( cond ) >::static_assert_##msg _sa
|
|
#else
|
|
#define HAPI_STATIC_ASSERT( cond, msg ) HAPI_STATIC_ASSERT_I( cond, msg )
|
|
#define HAPI_STATIC_ASSERT_I( cond, msg ) \
|
|
typedef char static_assert_##msg[ 2 * ( cond ) - 1 ]
|
|
#endif // __cplusplus
|
|
|
|
#endif // __HAPI_API_h__
|