/* 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_eventformatter.h -*-C++-*- #ifndef INCLUDED_BLPAPI_EVENTFORMATTER #define INCLUDED_BLPAPI_EVENTFORMATTER //@PURPOSE: Add messages to an Event for publishing // //@CLASSES: // blpapi::EventFormatter: A Mechanism to add information to an Event. // //@DESCRIPTION: This component adds messages to an Event which can be // later published. #ifndef INCLUDED_BLPAPI_CALL #include <blpapi_call.h> #endif #ifndef INCLUDED_BLPAPI_DEFS #include <blpapi_defs.h> #endif #ifndef INCLUDED_BLPAPI_EVENT #include <blpapi_event.h> #endif #ifndef INCLUDED_BLPAPI_TOPIC #include <blpapi_topic.h> #endif #ifndef INCLUDED_BLPAPI_TYPES #include <blpapi_types.h> #endif #ifdef __cplusplus extern "C" { #endif BLPAPI_EXPORT blpapi_EventFormatter_t *blpapi_EventFormatter_create(blpapi_Event_t *event); BLPAPI_EXPORT void blpapi_EventFormatter_destroy(blpapi_EventFormatter_t *victim); BLPAPI_EXPORT int blpapi_EventFormatter_appendMessage(blpapi_EventFormatter_t *formatter, const char *typeString, blpapi_Name_t *typeName, const blpapi_Topic_t *topic); BLPAPI_EXPORT int blpapi_EventFormatter_appendMessageSeq( blpapi_EventFormatter_t *formatter, const char *typeString, blpapi_Name_t *typeName, const blpapi_Topic_t *topic, unsigned int sequenceNumber, unsigned int); BLPAPI_EXPORT int blpapi_EventFormatter_appendResponse(blpapi_EventFormatter_t *formatter, const char *typeString, blpapi_Name_t *typeName); BLPAPI_EXPORT int blpapi_EventFormatter_appendRecapMessage( blpapi_EventFormatter_t *formatter, const blpapi_Topic_t *topic, const blpapi_CorrelationId_t *cid); BLPAPI_EXPORT int blpapi_EventFormatter_appendRecapMessageSeq( blpapi_EventFormatter_t *formatter, const blpapi_Topic_t *topic, const blpapi_CorrelationId_t *cid, unsigned int sequenceNumber, unsigned int); BLPAPI_EXPORT int blpapi_EventFormatter_setValueBool(blpapi_EventFormatter_t *formatter, const char *typeString, const blpapi_Name_t *typeName, blpapi_Bool_t value); BLPAPI_EXPORT int blpapi_EventFormatter_setValueChar(blpapi_EventFormatter_t *formatter, const char *typeString, const blpapi_Name_t *typeName, char value); BLPAPI_EXPORT int blpapi_EventFormatter_setValueInt32(blpapi_EventFormatter_t *formatter, const char *typeString, const blpapi_Name_t *typeName, blpapi_Int32_t value); BLPAPI_EXPORT int blpapi_EventFormatter_setValueInt64(blpapi_EventFormatter_t *formatter, const char *typeString, const blpapi_Name_t *typeName, blpapi_Int64_t value); BLPAPI_EXPORT int blpapi_EventFormatter_setValueFloat32(blpapi_EventFormatter_t *formatter, const char *typeString, const blpapi_Name_t *typeName, blpapi_Float32_t value); BLPAPI_EXPORT int blpapi_EventFormatter_setValueFloat64(blpapi_EventFormatter_t *formatter, const char *typeString, const blpapi_Name_t *typeName, blpapi_Float64_t value); BLPAPI_EXPORT int blpapi_EventFormatter_setValueDatetime( blpapi_EventFormatter_t *formatter, const char *typeString, const blpapi_Name_t *typeName, const blpapi_Datetime_t *value); BLPAPI_EXPORT int blpapi_EventFormatter_setValueString(blpapi_EventFormatter_t *formatter, const char *typeString, const blpapi_Name_t *typeName, const char *value); BLPAPI_EXPORT int blpapi_EventFormatter_setValueFromName( blpapi_EventFormatter_t *formatter, const char *typeString, const blpapi_Name_t *typeName, const blpapi_Name_t *value); BLPAPI_EXPORT int blpapi_EventFormatter_setValueNull(blpapi_EventFormatter_t *formatter, const char *typeString, const blpapi_Name_t *typeName); BLPAPI_EXPORT int blpapi_EventFormatter_pushElement(blpapi_EventFormatter_t *formatter, const char *typeString, const blpapi_Name_t *typeName); BLPAPI_EXPORT int blpapi_EventFormatter_popElement(blpapi_EventFormatter_t *formatter); BLPAPI_EXPORT int blpapi_EventFormatter_appendValueBool(blpapi_EventFormatter_t *formatter, blpapi_Bool_t value); BLPAPI_EXPORT int blpapi_EventFormatter_appendValueChar(blpapi_EventFormatter_t *formatter, char value); BLPAPI_EXPORT int blpapi_EventFormatter_appendValueInt32(blpapi_EventFormatter_t *formatter, blpapi_Int32_t value); BLPAPI_EXPORT int blpapi_EventFormatter_appendValueInt64(blpapi_EventFormatter_t *formatter, blpapi_Int64_t value); BLPAPI_EXPORT int blpapi_EventFormatter_appendValueFloat32( blpapi_EventFormatter_t *formatter, blpapi_Float32_t value); BLPAPI_EXPORT int blpapi_EventFormatter_appendValueFloat64( blpapi_EventFormatter_t *formatter, blpapi_Float64_t value); BLPAPI_EXPORT int blpapi_EventFormatter_appendValueDatetime( blpapi_EventFormatter_t *formatter, const blpapi_Datetime_t *value); BLPAPI_EXPORT int blpapi_EventFormatter_appendValueString( blpapi_EventFormatter_t *formatter, const char *value); BLPAPI_EXPORT int blpapi_EventFormatter_appendValueFromName( blpapi_EventFormatter_t *formatter, const blpapi_Name_t *value); BLPAPI_EXPORT int blpapi_EventFormatter_appendElement(blpapi_EventFormatter_t *formatter); #ifdef __cplusplus } namespace BloombergLP { namespace blpapi { // ==================== // class EventFormatter // ==================== class EventFormatter { // EventFormatter is used to populate 'Event's for publishing. // // An EventFormatter is created from an Event obtained from // createPublishEvent() on Service. Once the Message or Messages have been // appended to the Event using the EventFormatter the Event can be // published using publish() on the ProviderSession. // // EventFormatter objects cannot be copied or assigned so as to ensure // there is no ambiguity about what happens if two 'EventFormatter's are // both formatting the same 'Event'. // // The EventFormatter supportes appending message of the same type multiple // time in the same 'Event'. However the 'EventFormatter' supports write // once only to each field. It is an error to call setElement() or // pushElement() for the same name more than once at a particular level of // the schema when creating a message. blpapi_EventFormatter_t *d_handle; private: // NOT IMPLEMENTED EventFormatter& operator=(const EventFormatter&); EventFormatter(const EventFormatter&); EventFormatter(); public: // CREATORS EventFormatter(Event& event); // Create an EventFormatter to create Messages in the // specified 'Event'. An Event may only be reference by one // EventFormatter at any time. Attempting to create a second // EventFormatter referencing the same Event will result in an // exception being thrown. ~EventFormatter(); // Destroy this EventFormatter object. // MANIPULATORS void appendMessage(const char *messageType, const Topic& topic); // Append an (empty) message of the specified 'messageType' // that will be published under the specified 'topic' to the // Event referenced by this EventFormatter. After a message // has been appended its elements can be set using the various // setElement() methods. void appendMessage(const Name& messageType, const Topic& topic); // Append an (empty) message of the specified 'messageType' // that will be published under the specified 'topic' to the // Event referenced by this EventFormatter. After a message // has been appended its elements can be set using the various // setElement() methods. void appendMessage(const char *messageType, const Topic& topic, unsigned int sequenceNumber); // Append an (empty) message of the specified 'messageType' // that will be published under the specified 'topic' with the // specified 'sequenceNumber' to the Event referenced by this // EventFormatter. It is expected that 'sequenceNumber' is // greater (unless the value wrapped) than the last value used in // any previous message on this 'topic', otherwise the behavior // is undefined. // After a message has been appended its elements // can be set using the various setElement() methods. void appendMessage(const Name& messageType, const Topic& topic, unsigned int sequenceNumber); // Append an (empty) message of the specified 'messageType' // that will be published under the specified 'topic' with the // specified 'sequenceNumber' to the Event referenced by this // EventFormatter. It is expected that 'sequenceNumber' is // greater (unless the value wrapped) than the last value used in // any previous message on this 'topic', otherwise the behavior // is undefined. // After a message has been appended its elements // can be set using the various setElement() methods. void appendResponse(const char *opType); // Append an (empty) response message of the specified 'opType' // that will be sent in response to previously received // operation request. After a message has been appended its // elements can be set using the various setElement() methods. // Only one response can be appended. void appendResponse(const Name& opType); // Append an (empty) response message of the specified 'opType' // that will be sent in response to previously received // operation request. After a message has been appended its // elements can be set using the various setElement() methods. // Only one response can be appended. void appendRecapMessage(const Topic& topic, const CorrelationId *cid = 0); // Append a (empty) recap message that will be published under the // specified 'topic' to the Publish Event referenced by this // EventFormatter. Specify the optional CorrelationId pointer 'cid' // if this recap message is added in response to a TOPIC_RECAP message. // After a message has been appended its elements can be set using // the various setElement() methods. It is an error to create append // a recap message to an Admin event. void appendRecapMessage(const Topic& topic, unsigned int sequenceNumber, const CorrelationId *cid = 0); // Append a (empty) recap message that will be published under the // specified 'topic' with the specified 'sequenceNumber' to the Publish // Event referenced by this EventFormatter. Specify the optional // CorrelationId pointer 'cid' if this recap message is added in // response to a TOPIC_RECAP message. It is expected that // 'sequenceNumber' is greater (unless the value wrapped) than the // last value used in any previous message on this 'topic', // otherwise the behavior is undefined. // After a message has been appended its elements can be set using // the various setElement() methods. It is an error to create append // a recap message to an Admin event. void setElement(const char *name, bool value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. void setElement(const char *name, char value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. void setElement(const char *name, Int32 value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. void setElement(const char *name, Int64 value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. void setElement(const char *name, Float32 value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. void setElement(const char *name, Float64 value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. void setElement(const char *name, const Datetime& value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. void setElement(const char *name, const char *value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. The behavior is undefined unless 'value' // is not 'NULL'. // Clients wishing to format and publish null values (e.g. for the // purpose of cache management) should *not* use this function; use // 'setElementNull' instead. void setElement(const char *name, const Name& value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. void setElementNull(const char *name); // Create a null element with the specified 'name'. Note that whether // or not fields containing null values are published to subscribers is // dependent upon details of the service and schema configuration. If // the 'name' is invalid for the current message, if appendMessage() // has never been called or if the element identified by 'name' has // already been set an exception is thrown. void setElement(const Name& name, bool value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. void setElement(const Name& name, char value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. void setElement(const Name& name, Int32 value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. void setElement(const Name& name, Int64 value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. void setElement(const Name& name, Float32 value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. void setElement(const Name& name, Float64 value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. void setElement(const Name& name, const Datetime& value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. void setElement(const Name& name, const char *value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. The behavior is undefined unless 'value' // is not 'NULL'. // Clients wishing to format and publish null values (e.g. for the // purpose of cache management) should *not* use this function; use // 'setElementNull' instead. void setElement(const Name& name, const Name& value); // Set the element with the specified 'name' to the specified // 'value' in the current message in the Event referenced by // this EventFormatter. If the 'name' is invalid for the // current message, if appendMessage() has never been called // or if the element identified by 'name' has already been set // an exception is thrown. void setElementNull(const Name& name); // Create a null element with the specified 'name'. Note that whether // or not fields containing null values are published to subscribers is // dependent upon details of the service and schema configuration. If // the 'name' is invalid for the current message, if appendMessage() // has never been called or if the element identified by 'name' has // already been set an exception is thrown. void pushElement(const char *name); void pushElement(const Name& name); // Changes the level at which this EventFormatter is operating // to the specified element 'name'. The element 'name' must // identify either a choice, a sequence or an array at the // current level of the schema or the behavior is // undefined. If the 'name' is invalid for the current message, if // appendMessage() has never been called or if the element identified // by 'name' has already been set an exception is thrown. After this // returns the context of the EventFormatter is set to the element // 'name' in the schema and any calls to setElement() or pushElement() // are applied at that level. If 'name' represents an array of scalars // then appendValue() must be used to add values. If 'name' represents // an array of complex types then appendElement() creates the first // entry and set the context of the EventFormatter to that element. // Calling appendElement() again will create another entry. void popElement(); // Undoes the most recent call to pushLevel() on this // EventFormatter and returns the context of the // EventFormatter to where it was before the call to // pushElement(). Once popElement() has been called it is // invalid to attempt to re-visit the same context. void appendValue(bool value); void appendValue(char value); void appendValue(Int32 value); void appendValue(Int64 value); void appendValue(Float32 value); void appendValue(Float64 value); void appendValue(const Datetime& value); void appendValue(const char *value); void appendValue(const Name& value); void appendElement(); }; // ============================================================================ // INLINE AND TEMPLATE FUNCTION IMPLEMENTATIONS // ============================================================================ // -------------------- // class EventFormatter // -------------------- inline EventFormatter::EventFormatter(Event& event) { d_handle = blpapi_EventFormatter_create(event.impl()); } inline EventFormatter::~EventFormatter() { blpapi_EventFormatter_destroy(d_handle); } inline void EventFormatter::appendMessage(const char *messageType, const Topic& topic) { ExceptionUtil::throwOnError(blpapi_EventFormatter_appendMessage( d_handle, messageType, 0, topic.impl())); } inline void EventFormatter::appendMessage(const Name& messageType, const Topic& topic) { ExceptionUtil::throwOnError(blpapi_EventFormatter_appendMessage( d_handle, 0, messageType.impl(), topic.impl())); } inline void EventFormatter::appendMessage(const char *messageType, const Topic& topic, unsigned int sequenceNumber) { ExceptionUtil::throwOnError(BLPAPI_CALL_EVENTFORMATTER_APPENDMESSAGESEQ( d_handle, messageType, 0, topic.impl(), sequenceNumber, 0)); } inline void EventFormatter::appendMessage(const Name& messageType, const Topic& topic, unsigned int sequenceNumber) { ExceptionUtil::throwOnError(BLPAPI_CALL_EVENTFORMATTER_APPENDMESSAGESEQ( d_handle, 0, messageType.impl(), topic.impl(), sequenceNumber, 0)); } inline void EventFormatter::appendResponse(const char *opType) { ExceptionUtil::throwOnError( blpapi_EventFormatter_appendResponse( d_handle, opType, 0)); } inline void EventFormatter::appendResponse(const Name& opType) { ExceptionUtil::throwOnError( blpapi_EventFormatter_appendResponse( d_handle, 0, opType.impl())); } inline void EventFormatter::appendRecapMessage(const Topic& topic, const CorrelationId *cid) { ExceptionUtil::throwOnError(blpapi_EventFormatter_appendRecapMessage( d_handle, topic.impl(), cid ? &cid->impl() : 0)); } inline void EventFormatter::appendRecapMessage(const Topic& topic, unsigned int sequenceNumber, const CorrelationId *cid) { ExceptionUtil::throwOnError( BLPAPI_CALL_EVENTFORMATTER_APPENDRECAPMESSAGESEQ( d_handle, topic.impl(), cid ? &cid->impl() : 0, sequenceNumber, 0)); } inline void EventFormatter::setElement(const char *name, bool value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueBool( d_handle, name, 0, value)); } inline void EventFormatter::setElement(const char *name, char value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueChar( d_handle, name, 0, value)); } inline void EventFormatter::setElement(const char *name, Int32 value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueInt32( d_handle, name, 0, value)); } inline void EventFormatter::setElement(const char *name, Int64 value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueInt64( d_handle, name, 0, value)); } inline void EventFormatter::setElement(const char *name, Float32 value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueFloat32( d_handle, name, 0, value)); } inline void EventFormatter::setElement(const char *name, Float64 value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueFloat64( d_handle, name, 0, value)); } inline void EventFormatter::setElement(const char *name, const Datetime& value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueDatetime( d_handle, name, 0, &value.rawValue())); } inline void EventFormatter::setElement(const char *name, const char *value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueString( d_handle, name, 0, value)); } inline void EventFormatter::setElement(const char *name, const Name& value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueFromName( d_handle, name, 0, value.impl())); } inline void EventFormatter::setElementNull(const char *name) { ExceptionUtil::throwOnError( BLPAPI_CALL_EVENTFORMATTER_SETVALUENULL(d_handle, name, 0)); } inline void EventFormatter::setElement(const Name& name, bool value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueBool( d_handle, 0, name.impl(), value)); } inline void EventFormatter::setElement(const Name& name, char value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueChar( d_handle, 0, name.impl(), value)); } inline void EventFormatter::setElement(const Name& name, Int32 value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueInt32( d_handle, 0, name.impl(), value)); } inline void EventFormatter::setElement(const Name& name, Int64 value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueInt64( d_handle, 0, name.impl(), value)); } inline void EventFormatter::setElement(const Name& name, Float32 value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueFloat32( d_handle, 0, name.impl(), value)); } inline void EventFormatter::setElement(const Name& name, Float64 value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueFloat64( d_handle, 0, name.impl(), value)); } inline void EventFormatter::setElement(const Name& name, const Datetime& value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueDatetime( d_handle, 0, name.impl(), &value.rawValue())); } inline void EventFormatter::setElement(const Name& name, const char *value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueString( d_handle, 0, name.impl(), value)); } inline void EventFormatter::setElement(const Name& name, const Name& value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_setValueFromName( d_handle, 0, name.impl(), value.impl())); } inline void EventFormatter::setElementNull(const Name& name) { ExceptionUtil::throwOnError( BLPAPI_CALL_EVENTFORMATTER_SETVALUENULL(d_handle, 0, name.impl())); } inline void EventFormatter::pushElement(const char *name) { ExceptionUtil::throwOnError(blpapi_EventFormatter_pushElement( d_handle, name, 0)); } inline void EventFormatter::pushElement(const Name& name) { ExceptionUtil::throwOnError(blpapi_EventFormatter_pushElement( d_handle, 0, name.impl())); } inline void EventFormatter::popElement() { ExceptionUtil::throwOnError(blpapi_EventFormatter_popElement( d_handle)); } inline void EventFormatter::appendValue(bool value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_appendValueBool( d_handle, value)); } inline void EventFormatter::appendValue(char value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_appendValueChar( d_handle, value)); } inline void EventFormatter::appendValue(Int32 value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_appendValueInt32( d_handle, value)); } inline void EventFormatter::appendValue(Int64 value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_appendValueInt64( d_handle, value)); } inline void EventFormatter::appendValue(Float32 value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_appendValueFloat32( d_handle, value)); } inline void EventFormatter::appendValue(Float64 value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_appendValueFloat64( d_handle, value)); } inline void EventFormatter::appendValue(const Datetime& value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_appendValueDatetime( d_handle, &value.rawValue())); } inline void EventFormatter::appendValue(const char *value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_appendValueString( d_handle, value)); } inline void EventFormatter::appendValue(const Name& value) { ExceptionUtil::throwOnError(blpapi_EventFormatter_appendValueFromName( d_handle, value.impl())); } inline void EventFormatter::appendElement() { ExceptionUtil::throwOnError(blpapi_EventFormatter_appendElement( d_handle)); } } // close namespace blpapi } // close namespace BloombergLP #endif // #ifdef __cplusplus #endif // #ifndef INCLUDED_BLPAPI_EVENTFORMATTER