Files

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__