/* Copyright 2012. Bloomberg Finance L.P.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: The above
* copyright notice and this permission notice shall be included in all copies
* or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
// blpapi_call.h -*-C++-*-
#ifndef INCLUDED_BLPAPI_CALL
#define INCLUDED_BLPAPI_CALL
//@PURPOSE: Provide functions for dispatchtbl
//
//@DESCRIPTION: This component provides an interface to initialize the
// function table. [NOT TO BE INCLUDED BY APPLICATION CODE DIRECTLY]
#ifdef __cplusplus
// We only support dispatchtbl on windows currently
#if defined(_WIN32) || defined(__WIN32__)
#include <blpapi_dispatchtbl.h>
#include <blpapi_exception.h>
// NOTE: The following macros are used to avoid direct dependencies
// on functions that may not be available in an old DLL.
#define BLPAPI_TABLE_CHECK(FUNCNAME) \
((g_blpapiFunctionTableSize && \
offsetof(blpapi_FunctionEntries_t, FUNCNAME) < \
g_blpapiFunctionTableSize - 1) ? 1 : 0)
#define BLPAPI_TABLE_CALL(FUNCNAME) \
(BLPAPI_TABLE_CHECK(FUNCNAME) \
? (g_blpapiFunctionEntries.FUNCNAME) \
: BLPAPI_UNSUPPORTED_CALL(FUNCNAME))
#define BLPAPI_CALL_AVAILABLE(FUNCNAME) BLPAPI_TABLE_CHECK(FUNCNAME)
#define BLPAPI_CALL(FUNCNAME) BLPAPI_TABLE_CALL(FUNCNAME)
#define BLPAPI_UNSUPPORTED_CALL(FUNCNAME) \
(throw UnsupportedOperationException(#FUNCNAME " not supported"), 0)
#define BLPAPI_CALL_EVENTFORMATTER_APPENDMESSAGESEQ(a1, a2, a3, a4, a5, a6) \
(BLPAPI_TABLE_CALL( \
blpapi_EventFormatter_appendMessageSeq)(a1, a2, a3, a4, a5, a6))
#define BLPAPI_CALL_EVENTFORMATTER_APPENDRECAPMESSAGESEQ(a1, a2, a3, a4, a5) \
(BLPAPI_TABLE_CALL( \
blpapi_EventFormatter_appendRecapMessageSeq)(a1, a2, a3, a4, a5))
#define BLPAPI_CALL_MESSAGE_ADDREF(a1) \
(BLPAPI_TABLE_CHECK(blpapi_Message_addRef) \
? g_blpapiFunctionEntries.blpapi_Message_addRef(a1) \
: 0)
#define BLPAPI_CALL_MESSAGE_RELEASE(a1) \
(BLPAPI_TABLE_CHECK(blpapi_Message_release) \
? g_blpapiFunctionEntries.blpapi_Message_release(a1) \
: 0)
#define BLPAPI_CALL_SESSIONOPTIONS_SETMAXEVENTQUEUESIZE(a1, a2) \
(BLPAPI_TABLE_CHECK(blpapi_SessionOptions_setMaxEventQueueSize) \
? g_blpapiFunctionEntries. \
blpapi_SessionOptions_setMaxEventQueueSize(a1, a2) \
: 0)
#define BLPAPI_CALL_SESSIONOPTIONS_SETSLOWCONSUMERHIWATERMARK(a1, a2) \
(BLPAPI_TABLE_CHECK( \
blpapi_SessionOptions_setSlowConsumerWarningHiWaterMark) \
? g_blpapiFunctionEntries. \
blpapi_SessionOptions_setSlowConsumerWarningHiWaterMark(a1, a2) \
: 0)
#define BLPAPI_CALL_SESSIONOPTIONS_SETSLOWCONSUMERLOWATERMARK(a1, a2) \
(BLPAPI_TABLE_CHECK( \
blpapi_SessionOptions_setSlowConsumerWarningLoWaterMark) \
? g_blpapiFunctionEntries. \
blpapi_SessionOptions_setSlowConsumerWarningLoWaterMark(a1, a2) \
: 0)
#define BLPAPI_CALL_REQUEST_SETPREFERREDROUTE(a1, a2) \
do { \
if (BLPAPI_TABLE_CHECK(blpapi_Request_setPreferredRoute)) \
g_blpapiFunctionEntries.blpapi_Request_setPreferredRoute(a1, a2); \
} while(0)
#define BLPAPI_CALL_MESSAGE_FRAGMENTTYPE(a1) \
(BLPAPI_TABLE_CHECK(blpapi_Message_fragmentType) \
? g_blpapiFunctionEntries.blpapi_Message_fragmentType(a1) \
: 0)
#define BLPAPI_CALL_SESSIONOPTIONS_MAXEVENTQUEUESIZE(a1) \
(BLPAPI_TABLE_CHECK(blpapi_SessionOptions_maxEventQueueSize) \
? g_blpapiFunctionEntries.blpapi_SessionOptions_maxEventQueueSize(a1) \
: ULONG_MAX)
#define BLPAPI_CALL_SESSIONOPTIONS_SLOWCONSUMERHIWATERMARK(a1) \
(BLPAPI_TABLE_CHECK(blpapi_SessionOptions_slowConsumerWarningHiWaterMark) \
? g_blpapiFunctionEntries \
.blpapi_SessionOptions_slowConsumerWarningHiWaterMark(a1) \
: 1.0f)
#define BLPAPI_CALL_SESSIONOPTIONS_SLOWCONSUMERLOWATERMARK(a1) \
(BLPAPI_TABLE_CHECK(blpapi_SessionOptions_slowConsumerWarningLoWaterMark) \
? g_blpapiFunctionEntries \
.blpapi_SessionOptions_slowConsumerWarningLoWaterMark(a1) \
: 0.0f)
#define BLPAPI_CALL_SESSIONOPTIONS_DEFAULTKEEPALIVEINACTIVITYTIME(h) \
(BLPAPI_TABLE_CHECK( \
blpapi_SessionOptions_defaultKeepAliveInactivityTime) \
? g_blpapiFunctionEntries. \
blpapi_SessionOptions_defaultKeepAliveInactivityTime(h) \
: INT_MAX)
#define BLPAPI_CALL_SESSIONOPTIONS_DEFAULTKEEPALIVERESPONSETIMEOUT(h) \
(BLPAPI_TABLE_CHECK( \
blpapi_SessionOptions_defaultKeepAliveResponseTimeout) \
? g_blpapiFunctionEntries. \
blpapi_SessionOptions_defaultKeepAliveResponseTimeout(h) \
: INT_MAX)
#define BLPAPI_CALL_SESSIONOPTIONS_KEEPALIVEENABLED(h) \
(BLPAPI_TABLE_CHECK(blpapi_SessionOptions_keepAliveEnabled) \
? g_blpapiFunctionEntries. \
blpapi_SessionOptions_keepAliveEnabled(h) \
: 1)
#define BLPAPI_CALL_SESSIONOPTIONS_SETDEFAULTKEEPALIVEINACTIVITYTIME(h, t) \
(BLPAPI_TABLE_CHECK( \
blpapi_SessionOptions_setDefaultKeepAliveInactivityTime) \
? g_blpapiFunctionEntries. \
blpapi_SessionOptions_setDefaultKeepAliveInactivityTime(h,t) \
: 0)
#define BLPAPI_CALL_SESSIONOPTIONS_SETDEFAULTKEEPALIVERESPONSETIMEOUT(h, t) \
(BLPAPI_TABLE_CHECK( \
blpapi_SessionOptions_setDefaultKeepAliveResponseTimeout) \
? g_blpapiFunctionEntries. \
blpapi_SessionOptions_setDefaultKeepAliveResponseTimeout(h,t) \
: 0)
#define BLPAPI_CALL_SESSIONOPTIONS_SETKEEPALIVEENABLED(h, t) \
(BLPAPI_TABLE_CHECK(blpapi_SessionOptions_setKeepAliveEnabled) \
? g_blpapiFunctionEntries.blpapi_SessionOptions_setKeepAliveEnabled(h, t) \
: 0)
#define BLPAPI_CALL_HIGHPRECISIONDATETIME_COMPARE(a1, a2) \
(BLPAPI_TABLE_CHECK(blpapi_HighPrecisionDatetime_compare) \
? g_blpapiFunctionEntries.blpapi_HighPrecisionDatetime_compare(a1, a2) \
: blpapi_Datetime_compare((a1)->datetime, (a2)->datetime))
#define BLPAPI_CALL_HIGHPRECISIONDATETIME_PRINT(a1, a2, a3, a4, a5) \
(BLPAPI_TABLE_CHECK(blpapi_HighPrecisionDatetime_print) \
? g_blpapiFunctionEntries.blpapi_HighPrecisionDatetime_print(a1, \
a2, \
a3, \
a4, \
a5) \
: blpapi_Datetime_print(&((a1)->datetime), a2, a3, a4, a5))
#define BLPAPI_CALL_ELEMENT_SETVALUEHIGHPRECISIONDATETIME(a1, a2, a3) \
(BLPAPI_TABLE_CHECK(blpapi_Element_setValueHighPrecisionDatetime) \
? g_blpapiFunctionEntries.blpapi_Element_setValueHighPrecisionDatetime \
(a1, a2, a3) \
: blpapi_Element_setValueDatetime(a1, &((a2)->datetime), a3))
#define BLPAPI_CALL_ELEMENT_SETELEMENTHIGHPRECISIONDATETIME(a1, a2, a3, a4) \
(BLPAPI_TABLE_CHECK(blpapi_Element_setElementHighPrecisionDatetime) \
? g_blpapiFunctionEntries.blpapi_Element_setElementHighPrecisionDatetime \
(a1, a2, a3, a4) \
: blpapi_Element_setElementDatetime(a1, a2, a3, &((a4)->datetime)))
#define BLPAPI_CALL_ELEMENT_GETVALUEASHIGHPRECISIONDATETIME(a1, a2, a3) \
if (BLPAPI_TABLE_CHECK(blpapi_Element_getValueAsHighPrecisionDatetime)) { \
return g_blpapiFunctionEntries \
.blpapi_Element_getValueAsHighPrecisionDatetime( \
a1, \
&(a2)->rawHighPrecisionValue(),\
a3); \
} else { \
buffer->rawHighPrecisionValue().picoseconds = 0; \
return blpapi_Element_getValueAsDatetime(a1, \
&(a2)->rawValue(), \
a3); \
}
#define BLPAPI_CALL_SESSION_RESUBSCRIBEWITHID(a1, a2, a3, a4, a5) \
(BLPAPI_TABLE_CHECK(blpapi_Session_resubscribeWithId) \
? g_blpapiFunctionEntries.blpapi_Session_resubscribeWithId(a1, \
a2, \
a3, \
a4, \
a5) \
: blpapi_Session_resubscribe(a1, a2, a4, a5))
#define BLPAPI_CALL_EVENTFORMATTER_SETVALUENULL(a1, a2, a3) \
(BLPAPI_TABLE_CALL(blpapi_EventFormatter_setValueNull)(a1, a2, a3))
#define BLPAPI_CALL_DIAGNOSTICSUTIL_MEMORYINFO(a1, a2) \
if (BLPAPI_TABLE_CHECK(blpapi_DiagnosticsUtil_memoryInfo)) { \
return g_blpapiFunctionEntries.blpapi_DiagnosticsUtil_memoryInfo(a1, \
a2); \
} else { \
return -1; \
}
#define BLPAPI_CALL_SUBSCRIPTIONLIST_ADDRESOLVED(a1, a2, a3) \
(BLPAPI_TABLE_CHECK(blpapi_SubscriptionList_addResolved) \
? g_blpapiFunctionEntries.blpapi_SubscriptionList_addResolved( \
a1, \
a2, \
a3) \
: blpapi_SubscriptionList_add(a1, a2, a3, 0, 0, 0, 0))
#define BLPAPI_CALL_SUBSCRIPTIONLIST_ISRESOLVEDAT(a1, a2, a3) \
(BLPAPI_TABLE_CHECK(blpapi_SubscriptionList_isResolvedAt) \
? g_blpapiFunctionEntries \
.blpapi_SubscriptionList_isResolvedAt(a1, a2, a3) \
: (*a2 = 0, 0))
#define BLPAPI_CALL_PROVIDERSESSION_DEREGISTERSERVICE(a1, a2) \
(BLPAPI_TABLE_CALL(blpapi_ProviderSession_deregisterService)(a1, a2))
#define BLPAPI_CALL_SERVICEREGISTRATIONOPTIONS_SETPARTSTOREGISTER(a1, a2) \
(BLPAPI_TABLE_CALL( \
blpapi_ServiceRegistrationOptions_setPartsToRegister)(a1, a2))
#define BLPAPI_CALL_SERVICEREGISTRATIONOPTIONS_GETPARTSTOREGISTER(a1) \
(BLPAPI_TABLE_CALL( \
blpapi_ServiceRegistrationOptions_getPartsToRegister)(a1))
#define BLPAPI_CALL_PROVIDERSESSION_DELETETOPICS(a1, a2, a3) \
(BLPAPI_TABLE_CALL(blpapi_ProviderSession_deleteTopics)(a1, a2, a3))
#define BLPAPI_CALL_PROVIDERSESSION_ACTIVATESUBSERVICECODERANGE( \
a1, a2, a3, a4, a5) \
(BLPAPI_TABLE_CALL(blpapi_ProviderSession_activateSubServiceCodeRange)( \
a1, a2, a3, a4, a5))
#define BLPAPI_CALL_PROVIDERSESSION_DEACTIVATESUBSERVICECODERANGE( \
a1, a2, a3, a4) \
(BLPAPI_TABLE_CALL(blpapi_ProviderSession_deactivateSubServiceCodeRange)( \
a1, a2, a3, a4))
#define BLPAPI_CALL_SERVICEREGISTRATIONOPTIONS_ADDACTIVATESUBSERVICECODERANGE(\
a1, a2, a3, a4) \
(BLPAPI_TABLE_CALL( \
blpapi_ServiceRegistrationOptions_addActiveSubServiceCodeRange)( \
a1, a2, a3, a4))
#define \
BLPAPI_CALL_SERVICEREGISTRATIONOPTIONS_REMOVEALLACTIVESUBSERVICECODERANGES( \
a1) \
(BLPAPI_TABLE_CALL( \
blpapi_ServiceRegistrationOptions_removeAllActiveSubServiceCodeRanges)(\
a1))
#define BLPAPI_CALL_MESSAGE_TIMERECEIVED(a1, a2) \
(BLPAPI_TABLE_CALL(blpapi_Message_timeReceived)(a1, a2))
#define BLPAPI_CALL_SESSIONOPTION_SETRECORDSUBSCRIPTIONDATARECEIVETIMES(a1, \
a2) \
(BLPAPI_TABLE_CHECK( \
blpapi_SessionOptions_setRecordSubscriptionDataReceiveTimes) \
? g_blpapiFunctionEntries \
.blpapi_SessionOptions_setRecordSubscriptionDataReceiveTimes(a1, a2) \
: 0)
#define BLPAPI_CALL_SESSIONOPTION_RECORDSUBSCRIPTIONDATARECEIVETIMES(a1) \
(BLPAPI_TABLE_CHECK( \
blpapi_SessionOptions_recordSubscriptionDataReceiveTimes) \
? g_blpapiFunctionEntries \
.blpapi_SessionOptions_recordSubscriptionDataReceiveTimes(a1) \
: false)
#define BLPAPI_CALL_TIMEPOINTUTIL_NANOSECONDSBETWEEN(a1, a2) \
(BLPAPI_TABLE_CALL(blpapi_TimePointUtil_nanosecondsBetween)(a1, a2))
#define BLPAPI_CALL_HIGHRESOLUTIONCLOCK_NOW(a1) \
(BLPAPI_TABLE_CALL(blpapi_HighResolutionClock_now)(a1))
#define BLPAPI_CALL_HIGHPRECISIONDATETIME_FROMTIMEPOINT(a1, a2, a3) \
(BLPAPI_TABLE_CALL(blpapi_HighPrecisionDatetime_fromTimePoint)(a1, a2, a3))
#else // if defined(_WIN32) || defined(__WIN32__)
#define BLPAPI_CALL_AVAILABLE(FUNCNAME) true
#define BLPAPI_CALL(FUNCNAME) FUNCNAME
#define BLPAPI_CALL_EVENTFORMATTER_APPENDMESSAGESEQ(a1, a2, a3, a4, a5, a6) \
(blpapi_EventFormatter_appendMessageSeq)(a1, a2, a3, a4, a5, a6)
#define BLPAPI_CALL_EVENTFORMATTER_APPENDRECAPMESSAGESEQ(a1, a2, a3, a4, a5) \
(blpapi_EventFormatter_appendRecapMessageSeq)(a1, a2, a3, a4, a5)
#define BLPAPI_CALL_MESSAGE_ADDREF(a1) \
(blpapi_Message_addRef)(a1)
#define BLPAPI_CALL_MESSAGE_RELEASE(a1) \
(blpapi_Message_release)(a1)
#define BLPAPI_CALL_SESSIONOPTIONS_SETMAXEVENTQUEUESIZE(a1, a2) \
(blpapi_SessionOptions_setMaxEventQueueSize)(a1, a2)
#define BLPAPI_CALL_SESSIONOPTIONS_SETSLOWCONSUMERHIWATERMARK(a1, a2) \
(blpapi_SessionOptions_setSlowConsumerWarningHiWaterMark)(a1, a2)
#define BLPAPI_CALL_SESSIONOPTIONS_SETSLOWCONSUMERLOWATERMARK(a1, a2) \
(blpapi_SessionOptions_setSlowConsumerWarningLoWaterMark)(a1, a2)
#define BLPAPI_CALL_REQUEST_SETPREFERREDROUTE(a1, a2) \
(blpapi_Request_setPreferredRoute)(a1, a2)
#define BLPAPI_CALL_MESSAGE_FRAGMENTTYPE(a1) \
(blpapi_Message_fragmentType)(a1)
#define BLPAPI_CALL_SESSIONOPTIONS_MAXEVENTQUEUESIZE(a1) \
(blpapi_SessionOptions_maxEventQueueSize)(a1)
#define BLPAPI_CALL_SESSIONOPTIONS_SLOWCONSUMERHIWATERMARK(a1) \
(blpapi_SessionOptions_slowConsumerWarningHiWaterMark)(a1)
#define BLPAPI_CALL_SESSIONOPTIONS_SLOWCONSUMERLOWATERMARK(a1) \
(blpapi_SessionOptions_slowConsumerWarningLoWaterMark)(a1)
#define BLPAPI_CALL_SESSIONOPTIONS_DEFAULTKEEPALIVEINACTIVITYTIME(a1) \
(blpapi_SessionOptions_defaultKeepAliveInactivityTime)(a1)
#define BLPAPI_CALL_SESSIONOPTIONS_DEFAULTKEEPALIVERESPONSETIMEOUT(a1) \
(blpapi_SessionOptions_defaultKeepAliveResponseTimeout)(a1)
#define BLPAPI_CALL_SESSIONOPTIONS_KEEPALIVEENABLED(a1) \
(blpapi_SessionOptions_keepAliveEnabled)(a1)
#define BLPAPI_CALL_SESSIONOPTIONS_SETDEFAULTKEEPALIVEINACTIVITYTIME(a1, a2) \
(blpapi_SessionOptions_setDefaultKeepAliveInactivityTime)(a1, a2)
#define BLPAPI_CALL_SESSIONOPTIONS_SETDEFAULTKEEPALIVERESPONSETIMEOUT(a1, a2) \
(blpapi_SessionOptions_setDefaultKeepAliveResponseTimeout)(a1, a2)
#define BLPAPI_CALL_SESSIONOPTIONS_SETKEEPALIVEENABLED(a1, a2) \
(blpapi_SessionOptions_setKeepAliveEnabled)(a1, a2)
#define BLPAPI_CALL_HIGHPRECISIONDATETIME_COMPARE(a1, a2) \
(blpapi_HighPrecisionDatetime_compare)(a1, a2)
#define BLPAPI_CALL_HIGHPRECISIONDATETIME_PRINT(a1, a2, a3, a4, a5) \
(blpapi_HighPrecisionDatetime_print)(a1, a2, a3, a4, a5)
#define BLPAPI_CALL_ELEMENT_SETVALUEHIGHPRECISIONDATETIME(a1, a2, a3) \
(blpapi_Element_setValueHighPrecisionDatetime(a1, a2, a3))
#define BLPAPI_CALL_ELEMENT_SETELEMENTHIGHPRECISIONDATETIME(a1, a2, a3, a4) \
(blpapi_Element_setElementHighPrecisionDatetime(a1, a2, a3, a4))
#define BLPAPI_CALL_ELEMENT_GETVALUEASHIGHPRECISIONDATETIME(a1, a2, a3) \
return blpapi_Element_getValueAsHighPrecisionDatetime( \
a1, \
&a2->rawHighPrecisionValue(),\
a3);
#define BLPAPI_CALL_SESSION_RESUBSCRIBEWITHID(a1, a2, a3, a4, a5) \
(blpapi_Session_resubscribeWithId)(a1, a2, a3, a4, a5)
#define BLPAPI_CALL_EVENTFORMATTER_SETVALUENULL(a1, a2, a3) \
(blpapi_EventFormatter_setValueNull)(a1, a2, a3)
#define BLPAPI_CALL_DIAGNOSTICSUTIL_MEMORYINFO(a1, a2) \
return blpapi_DiagnosticsUtil_memoryInfo(a1, a2);
#define BLPAPI_CALL_SUBSCRIPTIONLIST_ADDRESOLVED(a1, a2, a3) \
(blpapi_SubscriptionList_addResolved)(a1, a2, a3)
#define BLPAPI_CALL_SUBSCRIPTIONLIST_ISRESOLVEDAT(a1, a2, a3) \
(blpapi_SubscriptionList_isResolvedAt)(a1, a2, a3)
#define BLPAPI_CALL_PROVIDERSESSION_DEREGISTERSERVICE(a1, a2) \
(blpapi_ProviderSession_deregisterService(a1, a2))
#define BLPAPI_CALL_SERVICEREGISTRATIONOPTIONS_SETPARTSTOREGISTER(a1, a2) \
(blpapi_ServiceRegistrationOptions_setPartsToRegister(a1, a2))
#define BLPAPI_CALL_SERVICEREGISTRATIONOPTIONS_GETPARTSTOREGISTER(a1) \
(blpapi_ServiceRegistrationOptions_getPartsToRegister(a1))
#define BLPAPI_CALL_PROVIDERSESSION_DELETETOPICS(a1, a2, a3) \
(blpapi_ProviderSession_deleteTopics(a1, a2, a3))
#define BLPAPI_CALL_PROVIDERSESSION_ACTIVATESUBSERVICECODERANGE( \
a1, a2, a3, a4, a5) \
(blpapi_ProviderSession_activateSubServiceCodeRange)(a1, a2, a3, a4, a5)
#define BLPAPI_CALL_PROVIDERSESSION_DEACTIVATESUBSERVICECODERANGE( \
a1, a2, a3, a4) \
(blpapi_ProviderSession_deactivateSubServiceCodeRange)(a1, a2, a3, a4)
#define BLPAPI_CALL_SERVICEREGISTRATIONOPTIONS_ADDACTIVATESUBSERVICECODERANGE(\
a1, a2, a3, a4) \
(blpapi_ServiceRegistrationOptions_addActiveSubServiceCodeRange)( \
a1, a2, a3, a4)
#define \
BLPAPI_CALL_SERVICEREGISTRATIONOPTIONS_REMOVEALLACTIVESUBSERVICECODERANGES( \
a1) \
(blpapi_ServiceRegistrationOptions_removeAllActiveSubServiceCodeRanges)(a1)
#define BLPAPI_CALL_MESSAGE_TIMERECEIVED(a1, a2) \
(blpapi_Message_timeReceived)(a1, a2)
#define BLPAPI_CALL_SESSIONOPTION_SETRECORDSUBSCRIPTIONDATARECEIVETIMES(a1, \
a2) \
(blpapi_SessionOptions_setRecordSubscriptionDataReceiveTimes)(a1, a2)
#define BLPAPI_CALL_SESSIONOPTION_RECORDSUBSCRIPTIONDATARECEIVETIMES(a1) \
(blpapi_SessionOptions_recordSubscriptionDataReceiveTimes)(a1)
#define BLPAPI_CALL_TIMEPOINTUTIL_NANOSECONDSBETWEEN(a1,a2) \
(blpapi_TimePointUtil_nanosecondsBetween)(a1, a2)
#define BLPAPI_CALL_HIGHRESOLUTIONCLOCK_NOW(a1) \
(blpapi_HighResolutionClock_now)(a1)
#define BLPAPI_CALL_HIGHPRECISIONDATETIME_FROMTIMEPOINT(a1, a2, a3) \
(blpapi_HighPrecisionDatetime_fromTimePoint)(a1, a2, a3)
#endif // if defined(_WIN32) || defined(__WIN32__)
#endif // __cplusplus
#endif // INCLUDED_BLPAPI_CALL