/* 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_topic.h -*-C++-*- #ifndef INCLUDED_BLPAPI_TOPIC #define INCLUDED_BLPAPI_TOPIC //@PURPOSE: Provide representation of a Topic // //@CLASSES: // blpapi::Topic: Represents a Topic // //@DESCRIPTION: This component provides a topic that is used for publishing // data on. #ifndef INCLUDED_BLPAPI_DEFS #include <blpapi_defs.h> #endif #ifndef INCLUDED_BLPAPI_SERVICE #include <blpapi_service.h> #endif struct blpapi_Topic; typedef struct blpapi_Topic blpapi_Topic_t; #ifdef __cplusplus extern "C" { #endif BLPAPI_EXPORT blpapi_Topic_t* blpapi_Topic_create(blpapi_Topic_t* from); BLPAPI_EXPORT void blpapi_Topic_destroy(blpapi_Topic_t* victim); BLPAPI_EXPORT int blpapi_Topic_compare(const blpapi_Topic_t* lhs, const blpapi_Topic_t* rhs); BLPAPI_EXPORT blpapi_Service_t* blpapi_Topic_service(const blpapi_Topic_t *topic); BLPAPI_EXPORT int blpapi_Topic_isActive(const blpapi_Topic_t *topic); #ifdef __cplusplus } namespace BloombergLP { namespace blpapi { // =========== // class Topic // =========== class Topic { // Used to identify the stream on which a message is published. // // Topic objects are obtained from createTopic() on // ProviderSession. They are used when adding a message to an // Event for publishing using appendMessage() on EventFormatter. blpapi_Topic_t *d_handle; public: Topic(); // Create a Topic object. A Topic created from the default // constructor is not a valid topic and must be assigned to // from a valid topic before it can be used. Topic(blpapi_Topic_t* handle); // Create a Topic object from a handle (main constructor) Topic(const Topic& original); // Create a copy of the specified 'original' Topic. ~Topic(); // Destroy this Topic object. // MANIPULATORS Topic& operator=(const Topic& rhs); // ACCESSORS bool isValid() const; // Returns true if this Topic is valid and can be used to // publish a message on. bool isActive() const; // Returns true if this topic was elected by the platform to become // the primary publisher. Service service() const; // Returns the service for which this topic was created. const blpapi_Topic_t* impl() const; blpapi_Topic_t* impl(); }; bool operator==(Topic const& lhs, Topic const& rhs); bool operator!=(Topic const& lhs, Topic const& rhs); bool operator<(Topic const& lhs, Topic const& rhs); // ============================================================================ // INLINE FUNCTION DEFINITIONS // ============================================================================ // ----------- // class Topic // ----------- inline Topic::Topic() : d_handle(0) {} inline Topic::Topic(blpapi_Topic_t* handle) : d_handle(blpapi_Topic_create(handle)) {} inline Topic::Topic(Topic const& original) : d_handle(blpapi_Topic_create(original.d_handle)) { } inline Topic::~Topic() { blpapi_Topic_destroy(d_handle); } inline Topic& Topic::operator=(Topic const& rhs) { if (this != &rhs) { blpapi_Topic_destroy(d_handle); d_handle = blpapi_Topic_create(rhs.d_handle); } return *this; } inline bool Topic::isValid() const { return 0 != d_handle; } inline bool Topic::isActive() const { return blpapi_Topic_isActive(d_handle) != 0; } inline Service Topic::service() const { return blpapi_Topic_service(d_handle); } inline const blpapi_Topic_t* Topic::impl() const { return d_handle; } inline blpapi_Topic_t* Topic::impl() { return d_handle; } inline bool operator==(Topic const& lhs, Topic const& rhs) { return blpapi_Topic_compare(lhs.impl(), rhs.impl())==0; } inline bool operator!=(Topic const& lhs, Topic const& rhs) { return blpapi_Topic_compare(lhs.impl(), rhs.impl())!=0; } inline bool operator<(Topic const& lhs, Topic const& rhs) { return blpapi_Topic_compare(lhs.impl(), rhs.impl())<0; } } // close namespace blpapi } // close namespace BloombergLP #endif // #ifdef __cplusplus #endif // #ifndef INCLUDED_BLPAPI_TOPIC