/* 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_exception.h -*-C++-*- #ifndef INCLUDED_BLPAPI_EXCEPTION #define INCLUDED_BLPAPI_EXCEPTION //@PURPOSE: Defines Exceptions that can be thrown by the blpapi library. // //@CLASSES: // blpapi_ErrorInfo: C struct to get more info on error // blpapi::Exception: Base class from all exceptions // blpapi::DuplicateCorrelationIdException: Duplicate CorrelationId exception // blpapi::InvalidStateException: Invalid state exception // blpapi::InvalidArgumentException: Invalid argument exception // blpapi::InvalidConversionException: Invalid conversion exception // blpapi::IndexOutOfRangeException: Index out of range exception // blpapi::FieldNotFoundException: Field not found exception // blpapi::NotFoundException: Not present exception // blpapi::UnknownErrorException: Unknown error exception // blpapi::UnsupportedOperationException: Unsupported operation exception // blpapi::ExceptionUtil: Internal exception generating class // //@DESCRIPTION: This file defines various exceptions that blpapi can throw. // #ifndef INCLUDED_BLPAPI_DEFS #include <blpapi_defs.h> #endif #ifndef INCLUDED_BLPAPI_ERROR #include <blpapi_error.h> #endif #ifdef __cplusplus extern "C" { #endif struct blpapi_ErrorInfo { int exceptionClass; char description[256]; }; typedef struct blpapi_ErrorInfo blpapi_ErrorInfo_t; BLPAPI_EXPORT int blpapi_getErrorInfo(blpapi_ErrorInfo_t *buffer, int errorCode); #ifdef __cplusplus } // extern "C" #ifndef INCLUDED_EXCEPTION #include <exception> #define INCLUDED_EXCEPTION #endif #ifndef INCLUDED_STRING #include <string> #define INCLUDED_STRING #endif namespace BloombergLP { namespace blpapi { // =============== // class Exception // =============== class Exception : public std::exception { // This class defines a base exception for blpapi operations. Objects of // this class contain the error description for the exception. // DATA const std::string d_description; private: // NOT IMPLEMENTED Exception& operator=(const Exception&); // = delete public: // CREATORS explicit Exception(const std::string& description); // Create an exception object initialized with the specified // 'description'. // ACCESSORS const std::string& description() const throw(); // Return the error description supplied at construction. virtual const char* what() const throw(); // Return the error description supplied at construction as a // null-terminated character sequence. virtual ~Exception() throw(); // Destroy this object. }; // ===================================== // class DuplicateCorrelationIdException // ===================================== class DuplicateCorrelationIdException : public Exception { // The class defines an exception for non unqiue 'blpapi::CorrelationId'. public: // CREATORS explicit DuplicateCorrelationIdException(const std::string &description); // Create an exception object initialized with the specified // 'description'. }; // =========================== // class InvalidStateException // =========================== class InvalidStateException: public Exception { // This class defines an exception for calling methods on an object that is // not in a valid state. public: // CREATORS explicit InvalidStateException(const std::string &description); // Create an exception object initialized with the specified // 'description'. }; // ============================== // class InvalidArgumentException // ============================== class InvalidArgumentException: public Exception { // This class defines an exception for invalid arguments on method // invocations. public: // CREATORS explicit InvalidArgumentException(const std::string& description); // Create an exception object initialized with the specified // 'description'. }; // ================================ // class InvalidConversionException // ================================ class InvalidConversionException: public Exception { // This class defines an exception for invalid conversion of data. public: // CREATORS explicit InvalidConversionException(const std::string& description); // Create an exception object initialized with the specified // 'description'. }; // ============================== // class IndexOutOfRangeException // ============================== class IndexOutOfRangeException: public Exception { // This class defines an exception to capture the error when an invalid // index is used for an operation that needs index. public: // CREATORS explicit IndexOutOfRangeException(const std::string& description); // Create an exception object initialized with the specified // 'description'. }; // ============================ // class FieldNotFoundException // ============================ class FieldNotFoundException: public Exception { // This class defines an exception to capture the error when an invalid // field is used for operation. // DEPRECATED public: // CREATORS explicit FieldNotFoundException(const std::string& description); // Create an exception object initialized with the specified // 'description'. }; // =========================== // class UnknownErrorException // =========================== class UnknownErrorException: public Exception { // This class defines an exception for errors that do not fall in any // predefined category. public: // CREATORS explicit UnknownErrorException(const std::string& description); // Create an exception object initialized with the specified // 'description'. }; // =================================== // class UnsupportedOperationException // =================================== class UnsupportedOperationException: public Exception { // This class defines an exception for unsupported operations. public: // CREATORS explicit UnsupportedOperationException(const std::string& description); // Create an exception object initialized with the specified // 'description'. }; // ======================= // class NotFoundException // ======================= class NotFoundException: public Exception { // This class defines an exception to capture the error when an item is // not found for an operation. public: // CREATORS explicit NotFoundException(const std::string& description); // Create an exception object initialized with the specified // 'description'. }; // =================== // class ExceptionUtil // =================== class ExceptionUtil { // This class provides a namespace for utility functions that convert // C-style error codes to 'blpapi::Exception' objects. private: static void throwException(int errorCode); // Throw the appropriate exception for the specified 'errorCode'. public: static void throwOnError(int errorCode); // Throw the appropriate exception for the specified 'errorCode' if the // errorCode is not 0. }; // ============================================================================ // INLINE FUNCTION DEFINITIONS // ============================================================================ // --------------- // class Exception // --------------- inline Exception::Exception(const std::string& newDescription) : d_description(newDescription) { } inline Exception::~Exception() throw() { } inline const std::string& Exception::description() const throw() { return d_description; } inline const char* Exception::what() const throw() { return description().c_str(); } // ------------------------------------- // class DuplicateCorrelationIdException // ------------------------------------- inline DuplicateCorrelationIdException::DuplicateCorrelationIdException( const std::string& newDescription) : Exception(newDescription) { } // --------------------------- // class InvalidStateException // --------------------------- inline InvalidStateException::InvalidStateException(const std::string& newDescription) : Exception(newDescription) { } // ------------------------------ // class InvalidArgumentException // ------------------------------ inline InvalidArgumentException::InvalidArgumentException( const std::string& newDescription) : Exception(newDescription) { } // -------------------------------- // class InvalidConversionException // -------------------------------- inline InvalidConversionException::InvalidConversionException( const std::string& newDescription) : Exception(newDescription) { } // ------------------------------ // class IndexOutOfRangeException // ------------------------------ inline IndexOutOfRangeException::IndexOutOfRangeException( const std::string& newDescription) : Exception(newDescription) { } // ---------------------------- // class FieldNotFoundException // ---------------------------- inline FieldNotFoundException::FieldNotFoundException( const std::string& newDescription) : Exception(newDescription) { } // --------------------------- // class UnknownErrorException // --------------------------- inline UnknownErrorException::UnknownErrorException(const std::string& newDescription) : Exception(newDescription) { } // ----------------------------------- // class UnsupportedOperationException // ----------------------------------- inline UnsupportedOperationException::UnsupportedOperationException( const std::string& newDescription) : Exception(newDescription) { } // ----------------------- // class NotFoundException // ----------------------- inline NotFoundException::NotFoundException(const std::string& newDescription) : Exception (newDescription) { } // ------------------- // class ExceptionUtil // ------------------- inline void ExceptionUtil::throwException(int errorCode) { const char* description = blpapi_getLastErrorDescription(errorCode); if (!description) { description = "Unknown"; } if (BLPAPI_ERROR_DUPLICATE_CORRELATIONID == errorCode) { throw DuplicateCorrelationIdException(description); } switch (BLPAPI_RESULTCLASS(errorCode)) case BLPAPI_INVALIDSTATE_CLASS: { throw InvalidStateException(description); case BLPAPI_INVALIDARG_CLASS: throw InvalidArgumentException(description); case BLPAPI_CNVERROR_CLASS: throw InvalidConversionException(description); case BLPAPI_BOUNDSERROR_CLASS: throw IndexOutOfRangeException(description); case BLPAPI_FLDNOTFOUND_CLASS: throw FieldNotFoundException(description); case BLPAPI_UNSUPPORTED_CLASS: throw UnsupportedOperationException(description); case BLPAPI_NOTFOUND_CLASS: throw NotFoundException(description); default: throw Exception(description); } } inline void ExceptionUtil::throwOnError(int errorCode) { if (errorCode) { throwException(errorCode); } } } // close namespace blpapi { } // close namespace BloombergLP { #endif #endif // #ifndef INCLUDED_BLPAPI_EXCEPTION