/* 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_topiclist.h -*-C++-*- #ifndef INCLUDED_BLPAPI_TOPICLIST #define INCLUDED_BLPAPI_TOPICLIST //@PURPOSE: Provide a representation of a list of topics. // //@CLASSES: // blpapi::TopicList: Represents a list of topics // //@DESCRIPTION: This component implements a list of topics which require // topic creation. #ifndef INCLUDED_BLPAPI_TYPES #include <blpapi_types.h> #endif #ifndef INCLUDED_BLPAPI_CORRELATIONID #include <blpapi_correlationid.h> #endif #ifndef INCLUDED_BLPAPI_DEFS #include <blpapi_defs.h> #endif #ifndef INCLUDED_BLPAPI_ELEMENT #include <blpapi_element.h> #endif #ifndef INCLUDED_BLPAPI_NAME #include <blpapi_name.h> #endif #ifndef INCLUDED_BLPAPI_MESSAGE #include <blpapi_message.h> #endif #ifndef INCLUDED_BLPAPI_RESOLUTIONLIST #include <blpapi_resolutionlist.h> #endif struct blpapi_TopicList; typedef struct blpapi_TopicList blpapi_TopicList_t; #ifdef __cplusplus extern "C" { #endif BLPAPI_EXPORT blpapi_TopicList_t* blpapi_TopicList_create( blpapi_TopicList_t* from); BLPAPI_EXPORT void blpapi_TopicList_destroy( blpapi_TopicList_t *list); BLPAPI_EXPORT int blpapi_TopicList_add( blpapi_TopicList_t* list, const char* topic, const blpapi_CorrelationId_t *correlationId); BLPAPI_EXPORT int blpapi_TopicList_addFromMessage( blpapi_TopicList_t* list, const blpapi_Message_t* topic, const blpapi_CorrelationId_t *correlationId); BLPAPI_EXPORT int blpapi_TopicList_correlationIdAt( const blpapi_TopicList_t* list, blpapi_CorrelationId_t* result, size_t index); BLPAPI_EXPORT int blpapi_TopicList_topicString( const blpapi_TopicList_t* list, const char** topic, const blpapi_CorrelationId_t* id); BLPAPI_EXPORT int blpapi_TopicList_topicStringAt( const blpapi_TopicList_t* list, const char** topic, size_t index); BLPAPI_EXPORT int blpapi_TopicList_status( const blpapi_TopicList_t* list, int* status, const blpapi_CorrelationId_t* id); BLPAPI_EXPORT int blpapi_TopicList_statusAt( const blpapi_TopicList_t* list, int* status, size_t index); BLPAPI_EXPORT int blpapi_TopicList_message( const blpapi_TopicList_t* list, blpapi_Message_t** element, const blpapi_CorrelationId_t* id); BLPAPI_EXPORT int blpapi_TopicList_messageAt( const blpapi_TopicList_t* list, blpapi_Message_t** element, size_t index); BLPAPI_EXPORT int blpapi_TopicList_size( const blpapi_TopicList_t* list); #ifdef __cplusplus } #ifndef INCLUDED_BLPAPI_EXCEPTION #include <blpapi_exception.h> #endif namespace BloombergLP { namespace blpapi { class ResolutionList; // =============== // class TopicList // =============== class TopicList { // Contains a list of topics which require creation. // // Created from topic strings or from TOPIC_SUBSCRIBED or // RESOLUTION_SUCCESS messages. // This is passed to a createTopics() call or createTopicsAsync() // call on a ProviderSession. It is updated and returned by the // createTopics() call. blpapi_TopicList_t *d_handle_p; public: enum Status { NOT_CREATED, CREATED, FAILURE }; // CLASS METHODS TopicList(); // Create an empty TopicList. TopicList(const ResolutionList& original); // Create a topic list from ResolutionList. // User has previously resolved topics in ResolutionList // and wants to now createTopics. TopicList(const TopicList& original); // Copy constructor. ~TopicList(); // Destroy this TopicList. // MANIPULATORS int add(const char* topic, const CorrelationId& correlationId=CorrelationId()); // Add the specified 'topic' to this list, optionally // specifying a 'correlationId'. Returns 0 on success or // negative number on failure. After a successful call to // add() the status for this entry is NOT_CREATED. int add(Message const& message, const CorrelationId& correlationId=CorrelationId()); // Add the topic contained in the specified // 'topicSubscribedMessage' or 'resolutionSuccessMessage' // to this list, optionally specifying a 'correlationId'. // Returns 0 on success or a negative number on failure. // After a successful call to add() // the status for this entry is NOT_CREATED. // ACCESSORS CorrelationId correlationIdAt(size_t index) const; // Returns the CorrelationId of the specified 'index'th entry in // this TopicList. If 'index' >= size() an exception is // thrown. const char* topicString(const CorrelationId& correlationId) const; // Returns a pointer to the topic of the entry identified by // the specified 'correlationId'. If the 'correlationId' does // not identify an entry in this TopicList then an // exception is thrown. const char* topicStringAt(size_t index) const; // Returns a pointer to the topic of the specified 'index'th // entry. If 'index' >= size() an exception is thrown. int status(const CorrelationId& correlationId) const; // Returns the status of the entry in this TopicList // identified by the specified 'correlationId'. This may be // NOT_CREATED, CREATED and FAILURE. // If the 'correlationId' does not identify an entry in this // TopicList then an exception is thrown. int statusAt(size_t index) const; // Returns the status of the specified 'index'th entry in this // TopicList. This may be NOT_CREATED, CREATED and FAILURE. // If 'index' > size() an exception is thrown. Message const message(const CorrelationId& correlationId) const; // Returns the value of the message received during // creation of the topic identified by the specified // 'correlationId'. If 'correlationId' does not identify an // entry in this TopicList or if the status of the entry // identify by 'correlationId' is not CREATED an exception is // thrown. // // The message returned can be used when creating an instance // of Topic. Message const messageAt(size_t index) const; // Returns the value of the message received during creation // of the specified 'index'th entry in this TopicList. If // 'index' >= size() or if the status of the 'index'th entry // is not CREATED an exception is thrown. // // The message returned can be used when creating an instance // of Topic. size_t size() const; // Returns the number of entries in this list. const blpapi_TopicList_t* impl() const; blpapi_TopicList_t* impl(); }; // ============================================================================ // INLINE FUNCTION DEFINITIONS // ============================================================================ // --------------- // class TopicList // --------------- inline TopicList::TopicList() : d_handle_p(blpapi_TopicList_create(0)) { } inline TopicList::TopicList( const TopicList& original) : d_handle_p(blpapi_TopicList_create(original.d_handle_p)) { } inline TopicList::TopicList( const ResolutionList& original) : d_handle_p( blpapi_TopicList_create((blpapi_TopicList_t *)original.impl())) { } inline TopicList::~TopicList() { blpapi_TopicList_destroy(d_handle_p); } inline int TopicList::add(const char* topic, const CorrelationId& correlationId) { return blpapi_TopicList_add(d_handle_p, topic, &correlationId.impl()); } inline int TopicList::add(const Message& newMessage, const CorrelationId& correlationId) { return blpapi_TopicList_addFromMessage(d_handle_p, newMessage.impl(), &correlationId.impl()); } inline CorrelationId TopicList::correlationIdAt(size_t index) const { blpapi_CorrelationId_t correlationId; ExceptionUtil::throwOnError( blpapi_TopicList_correlationIdAt(d_handle_p, &correlationId, index)); return CorrelationId(correlationId); } inline const char* TopicList::topicString(const CorrelationId& correlationId) const { const char* topic; ExceptionUtil::throwOnError( blpapi_TopicList_topicString(d_handle_p, &topic, &correlationId.impl())); return topic; } inline const char* TopicList::topicStringAt(size_t index) const { const char* topic; ExceptionUtil::throwOnError( blpapi_TopicList_topicStringAt(d_handle_p, &topic, index)); return topic; } inline int TopicList::status(const CorrelationId& correlationId) const { int result; ExceptionUtil::throwOnError( blpapi_TopicList_status(d_handle_p, &result, &correlationId.impl())); return result; } inline int TopicList::statusAt(size_t index) const { int result; ExceptionUtil::throwOnError( blpapi_TopicList_statusAt(d_handle_p, &result, index)); return result; } inline Message const TopicList::message(const CorrelationId& correlationId) const { blpapi_Message_t* messageByCid; ExceptionUtil::throwOnError( blpapi_TopicList_message(d_handle_p, &messageByCid, &correlationId.impl())); BLPAPI_CALL_MESSAGE_ADDREF(messageByCid); return Message(messageByCid, true); } inline Message const TopicList::messageAt(size_t index) const { blpapi_Message_t* messageByIndex; ExceptionUtil::throwOnError( blpapi_TopicList_messageAt(d_handle_p, &messageByIndex, index)); BLPAPI_CALL_MESSAGE_ADDREF(messageByIndex); return Message(messageByIndex, true); } inline size_t TopicList::size() const { return blpapi_TopicList_size(d_handle_p); } inline const blpapi_TopicList_t* TopicList::impl() const { return d_handle_p; } inline blpapi_TopicList_t* TopicList::impl() { return d_handle_p; } } // close namespace blpapi } // close namespace BloombergLP #endif // ifdef __cplusplus #endif // #ifndef INCLUDED_BLPAPI_TOPICLIST