You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

124 lines
4.3 KiB
C++

#if ! __WXMP_Common_hpp__
#define __WXMP_Common_hpp__ 1
// =================================================================================================
// Copyright 2002-2007 Adobe Systems Incorporated
// All Rights Reserved.
//
// NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the terms
// of the Adobe license agreement accompanying it.
// =================================================================================================
#ifndef XMP_Inline
#if TXMP_EXPAND_INLINE
#define XMP_Inline inline
#else
#define XMP_Inline /* not inline */
#endif
#endif
#define XMP_CTorDTorIntro(Class) template <class tStringObj> XMP_Inline Class<tStringObj>
#define XMP_MethodIntro(Class,ResultType) template <class tStringObj> XMP_Inline ResultType Class<tStringObj>
struct WXMP_Result {
XMP_StringPtr errMessage;
void * ptrResult;
double floatResult;
XMP_Uns64 int64Result;
XMP_Uns32 int32Result;
WXMP_Result() : errMessage(0) {};
};
#if __cplusplus
extern "C" {
#endif
#define PropagateException(res) \
if ( res.errMessage != 0 ) throw XMP_Error ( res.int32Result, res.errMessage );
#ifndef TraceXMPCalls
#define TraceXMPCalls 0
#endif
#if ! TraceXMPCalls
#define InvokeCheck(WCallProto) \
WXMP_Result wResult; \
WCallProto; \
PropagateException ( wResult )
#else
#define InvokeCheck(WCallProto) \
WXMP_Result wResult; \
fprintf ( stderr, "WXMP calling: %s\n", #WCallProto ); fflush ( stderr ); \
WCallProto; \
if ( wResult.errMessage == 0 ) { \
fprintf ( stderr, "WXMP back, no error\n" ); fflush ( stderr ); \
} else { \
fprintf ( stderr, "WXMP back, error: %s\n", wResult.errMessage ); fflush ( stderr ); \
} \
PropagateException ( wResult )
#endif
// -------------------------------------------------------------------------------------------------
#define WrapNoCheckVoid(WCallProto) \
WCallProto;
#define WrapCheckVoid(WCallProto) \
InvokeCheck(WCallProto)
#define WrapCheckMetaRef(result,WCallProto) \
InvokeCheck(WCallProto); \
XMPMetaRef result = XMPMetaRef(wResult.ptrResult)
#define WrapCheckIterRef(result,WCallProto) \
InvokeCheck(WCallProto); \
XMPIteratorRef result = XMPIteratorRef(wResult.ptrResult)
#define WrapCheckDocOpsRef(result,WCallProto) \
InvokeCheck(WCallProto); \
XMPDocOpsRef result = XMPDocOpsRef(wResult.ptrResult)
#define WrapCheckBool(result,WCallProto) \
InvokeCheck(WCallProto); \
bool result = bool(wResult.int32Result)
#define WrapCheckTriState(result,WCallProto) \
InvokeCheck(WCallProto); \
XMP_TriState result = XMP_TriState(wResult.int32Result)
#define WrapCheckOptions(result,WCallProto) \
InvokeCheck(WCallProto); \
XMP_OptionBits result = XMP_OptionBits(wResult.int32Result)
#define WrapCheckStatus(result,WCallProto) \
InvokeCheck(WCallProto); \
XMP_Status result = XMP_Status(wResult.int32Result)
#define WrapCheckIndex(result,WCallProto) \
InvokeCheck(WCallProto); \
XMP_Index result = XMP_Index(wResult.int32Result)
#define WrapCheckInt32(result,WCallProto) \
InvokeCheck(WCallProto); \
XMP_Int32 result = wResult.int32Result
#define WrapCheckInt64(result,WCallProto) \
InvokeCheck(WCallProto); \
XMP_Int64 result = wResult.int64Result
#define WrapCheckFloat(result,WCallProto) \
InvokeCheck(WCallProto); \
double result = wResult.floatResult
#define WrapCheckFormat(result,WCallProto) \
InvokeCheck(WCallProto); \
XMP_FileFormat result = wResult.int32Result
// =================================================================================================
#if __cplusplus
} /* extern "C" */
#endif
#endif // __WXMP_Common_hpp__