/* 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_versioninfo.h -*-C++-*- #ifndef INCLUDED_BLPAPI_VERSIONINFO #define INCLUDED_BLPAPI_VERSIONINFO //@PURPOSE: Provide BLPAPI SDK library version information. // //@CLASSES: // blpapi::VersionInfo: basic BLPAPI SDK library version attribute class // //@DESCRIPTION: This component provides access the BLPAPI SDK library version // information. Each version of the BLPAPI library is identified by four // integers: major, minor, patch, and build. // // The current major version is 3; there is no guarantee of compatibility // between different major versions. // // Differences in minor version numbers indicate significant feature additions. // Standard distributions of the BLPAPI have minor version numbers below 128, // and higher minor numbers are expected to provide APIs that are a superset of // the APIs provided by lower minor version numbers; i.e. all functionality and // interfaces supported by BLPAPI 3.7 is also provided by BLPAPI 3.8, while the // inverse is not typically true. (Bloomberg occasionally distributes library // versions with version numbers above 127; consult the release information // distributed with these libraries to determine interoperability with other // minor versions.) // // Increments to patch numbers indicate performance or stability enhancements // to the library. // // Build numbers typically do not carry any information about the library // version's functionality, but can be used along with the other parts of the // build number to uniquely identity a precise library binary version (e.g. for // the purpose of code signing and auditing). // ///Usage ///----- ///C++ usage ///- - - - - // This example logs the BLPAPI version in order to make the logs analysis more // productive: //.. // blpapi::VersionInfo blpapiVersion; // // Client log the library version for reference and future debugging // log("BLPAPI version: %d.%d.%d.%d", // blpapiVersion.majorVersion(), // blpapiVersion.minorVersion(), // blpapiVersion.patchVersion(), // blpapiVersion.buildVersion()); //.. // ///C usage ///- - - - // This example logs the BLPAPI version in order to make the logs analysis more // productive: //.. // int majorVersion, minorVersion, patchVersion, buildVersion; // blpapi_getVersionInfo(&majorVersion, &minorVersion, &patchVersion, // &buildVersion); // // Client log the library version for reference and future debugging // log("BLPAPI version: %d.%d.%d.%d", majorVersion, minorVersion, // patchVersion, buildVersion); //.. // // // This example provide shows how to use the backward API signature // compatibility macros BLPAPI_SDK_VERSION and BLPAPI_MAKE_VERSION (see // blpapi_dispatchtbl.h): //.. // #if BLPAPI_SDK_VERSION >= BLPAPI_MAKE_VERSION(3, 3, 7) // // Do version 3.3.7 specific stuff here (e.g. adding functions with old // // signature to an array so a client code that was compiled with // // version 3.3.7 will still be able to run using the new version. // ... // #elif BLPAPI_SDK_VERSION ... //.. #ifndef INCLUDED_BLPAPI_CALL #include <blpapi_call.h> #endif #ifndef INCLUDED_BLPAPI_DEFS #include <blpapi_defs.h> #endif #ifndef INCLUDED_BLPAPI_VERSIONMACROS #include <blpapi_versionmacros.h> #endif #ifdef __cplusplus extern "C" { #endif // ifdef __cplusplus BLPAPI_EXPORT void blpapi_getVersionInfo(int *majorVersion, int *minorVersion, int *patchVersion, int *buildVersion); // Initialize the 4 parameters with the current release version information // which include the following version parts: Major, Minor, Patch, and // Build. BLPAPI_EXPORT const char *blpapi_getVersionIdentifier(void); // Return a null-terminated sequence of printable ascii characters (with // values from 0x20 to 0x7e, inclusive) identifying the version of the // blpapi runtime library. The lifetime of the returned string is // guaranteed until the end of `main()` (but is *not* necessarily usable // during the C++ static destruction phase). #ifdef __cplusplus } #include <string> #include <ostream> #include <sstream> namespace BloombergLP { namespace blpapi { // ================= // class VersionInfo // ================= class VersionInfo { // This attribute class holds the four integer components of a BLPAPI // version number, provides factory methods to obtain such version numbers // for both the headers used at compile time and the library loaded at run // time, and provides a static function to obtain an opaque version // identifer string for use by Bloomberg support. private: // INSTANCE DATA int d_major; // BLPAPI SDK library major version int d_minor; // BLPAPI SDK library minor version int d_patch; // BLPAPI SDK library patch version int d_build; // BLPAPI SDK library build version VersionInfo(int major, int minor, int patch, int build); // Create a 'VersionInfo' object containing the specified 'major', // 'minor', 'patch', and 'build' numbers. public: // CREATORS static VersionInfo headerVersion(); // Return a 'VersionInfo' object containing the version of the BLPAPI // headers against which the client application was compiled. Note // that the version of the BLPAPI library loaded at runtime may be // different than the version of the headers against which the code was // compiled. static VersionInfo runtimeVersion(); // Return a 'VersionInfo' object containing the version of the BLPAPI // runtime library that is currently running. Note that the version of // the BLPAPI library loaded at runtime may be different than the // version of the headers against which the code was compiled. VersionInfo(); // This function is a synonym for 'VersionInfo::runtimeVersion()'. // DEPRECATED // ACCESSORS int majorVersion() const; // Return the major version number. int minorVersion() const; // Return the minor version number. int patchVersion() const; // Return the patch version number. int buildVersion() const; // Return the build version number. static std::string versionIdentifier(); // Return a string containing a sequence of printable ascii characters // (with values from 0x20 to 0x7e, inclusive) identifying the version // of the blpapi runtime library. The format of this string is // unspecified. }; std::ostream& operator<<(std::ostream& stream, const VersionInfo& rhs); // Output the specified 'rhs' to the specified 'stream' in a human-readable // format. Note that the exact details of this format are not specified // and may be differ between different library versions. //============================================================================= // INLINE FUNCTION DEFINITIONS //============================================================================= // ----------------- // class VersionInfo // ----------------- // CREATORS inline VersionInfo::VersionInfo(int major, int minor, int patch, int build) : d_major(major) , d_minor(minor) , d_patch(patch) , d_build(build) { } inline VersionInfo VersionInfo::headerVersion() { return VersionInfo(BLPAPI_VERSION_MAJOR, BLPAPI_VERSION_MINOR, BLPAPI_VERSION_PATCH, BLPAPI_VERSION_BUILD); } inline VersionInfo VersionInfo::runtimeVersion() { int major, minor, patch, build; blpapi_getVersionInfo(&major, &minor, &patch, &build); return VersionInfo(major, minor, patch, build); } inline VersionInfo::VersionInfo() { blpapi_getVersionInfo(&d_major, &d_minor, &d_patch, &d_build); } // ACCESSORS inline int VersionInfo::majorVersion() const { return d_major; } inline int VersionInfo::minorVersion() const { return d_minor; } inline int VersionInfo::patchVersion() const { return d_patch; } inline int VersionInfo::buildVersion() const { return d_build; } inline std::string VersionInfo::versionIdentifier() { std::ostringstream oss; oss << "blpapi-cpp; headers " << headerVersion() << "; runtime " << runtimeVersion(); if (BLPAPI_CALL_AVAILABLE(blpapi_getVersionIdentifier)) { oss << '-' << BLPAPI_CALL(blpapi_getVersionIdentifier)(); } return oss.str(); } inline std::ostream& operator<<(std::ostream& stream, const VersionInfo& rhs) { return stream << rhs.majorVersion() << '.' << rhs.minorVersion() << '.' << rhs.patchVersion() << '.' << rhs.buildVersion(); } } // close namespace blpapi } // close namespace BloombergLP #endif // ifdef __cplusplus #endif // INCLUDED_BLPAPI_VERSIONINFO