/* 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_types.h                                                     -*-C++-*-
#ifndef INCLUDED_BLPAPI_TYPES
#define INCLUDED_BLPAPI_TYPES

//@PURPOSE: Provide BLPAPI types.
//
//@CLASSES:
// blpapi::DataType: Data types in the schema
//
//@DESCRIPTION: This component implements BLPAPI types.

typedef int                 blpapi_Bool_t;
typedef char                blpapi_Char_t;
typedef unsigned char       blpapi_UChar_t;
typedef short               blpapi_Int16_t;
typedef unsigned short      blpapi_UInt16_t;
typedef int                 blpapi_Int32_t;
typedef unsigned int        blpapi_UInt32_t;
typedef long long           blpapi_Int64_t;
typedef unsigned long long  blpapi_UInt64_t;
typedef float               blpapi_Float32_t;
typedef double              blpapi_Float64_t;


enum blpapi_DataType_t {
        BLPAPI_DATATYPE_BOOL           = 1     // Bool
      , BLPAPI_DATATYPE_CHAR           = 2     // Char
      , BLPAPI_DATATYPE_BYTE           = 3     // Unsigned 8 bit value
      , BLPAPI_DATATYPE_INT32          = 4     // 32 bit Integer
      , BLPAPI_DATATYPE_INT64          = 5     // 64 bit Integer
      , BLPAPI_DATATYPE_FLOAT32        = 6     // 32 bit Floating point - IEEE
      , BLPAPI_DATATYPE_FLOAT64        = 7     // 64 bit Floating point - IEEE
      , BLPAPI_DATATYPE_STRING         = 8     // ASCIIZ string
      , BLPAPI_DATATYPE_BYTEARRAY      = 9     // Opaque binary data
      , BLPAPI_DATATYPE_DATE           = 10    // Date
      , BLPAPI_DATATYPE_TIME           = 11    // Timestamp
      , BLPAPI_DATATYPE_DECIMAL        = 12    //
      , BLPAPI_DATATYPE_DATETIME       = 13    // Date and time
      , BLPAPI_DATATYPE_ENUMERATION    = 14    // An opaque enumeration
      , BLPAPI_DATATYPE_SEQUENCE       = 15    // Sequence type
      , BLPAPI_DATATYPE_CHOICE         = 16    // Choice type
      , BLPAPI_DATATYPE_CORRELATION_ID = 17    // Used for some internal
                                               // messages
};

typedef enum blpapi_Logging_Severity_t {
    blpapi_Logging_SEVERITY_OFF   = 0,
    blpapi_Logging_SEVERITY_FATAL = 1,
    blpapi_Logging_SEVERITY_ERROR = 2,
    blpapi_Logging_SEVERITY_WARN  = 3,
    blpapi_Logging_SEVERITY_INFO  = 4,
    blpapi_Logging_SEVERITY_DEBUG = 5,
    blpapi_Logging_SEVERITY_TRACE = 6
} blpapi_Logging_Severity_t;

struct blpapi_AbstractSession;
typedef struct blpapi_AbstractSession blpapi_AbstractSession_t;

struct blpapi_Constant;
typedef struct blpapi_Constant blpapi_Constant_t;

struct blpapi_ConstantList;
typedef struct blpapi_ConstantList blpapi_ConstantList_t;

struct blpapi_Element;
typedef struct blpapi_Element blpapi_Element_t;

struct blpapi_Event;
typedef struct blpapi_Event blpapi_Event_t;

struct blpapi_EventDispatcher;
typedef struct blpapi_EventDispatcher blpapi_EventDispatcher_t;

struct blpapi_EventFormatter;
typedef struct blpapi_EventFormatter blpapi_EventFormatter_t;

struct blpapi_EventQueue;
typedef struct blpapi_EventQueue blpapi_EventQueue_t;

struct blpapi_MessageIterator;
typedef struct blpapi_MessageIterator blpapi_MessageIterator_t;

struct blpapi_Name;
typedef struct blpapi_Name blpapi_Name_t;

struct blpapi_Operation;
typedef struct blpapi_Operation blpapi_Operation_t;

struct blpapi_ProviderSession;
typedef struct blpapi_ProviderSession blpapi_ProviderSession_t;

struct blpapi_Service;
typedef struct blpapi_Service blpapi_Service_t;

struct blpapi_Session;
typedef struct blpapi_Session blpapi_Session_t;

struct blpapi_SessionOptions;
typedef struct blpapi_SessionOptions blpapi_SessionOptions_t;

struct blpapi_SubscriptionItrerator;
typedef struct blpapi_SubscriptionItrerator blpapi_SubscriptionIterator_t;

struct blpapi_Identity;
typedef struct blpapi_Identity blpapi_UserHandle;
typedef struct blpapi_Identity blpapi_UserHandle_t;

struct blpapi_Identity;
typedef struct blpapi_Identity blpapi_Identity_t;

#ifdef __cplusplus

namespace BloombergLP {
namespace blpapi {
                         // ===============
                         // struct DataType
                         // ===============

struct DataType {
    // Contains the possible data types which can be represented in an
    // Element.

  public:
    enum Value {
      // The possible data types which can be represented in an Element.
      BOOL           = BLPAPI_DATATYPE_BOOL,           // Boolean
      CHAR           = BLPAPI_DATATYPE_CHAR,           // Char
      BYTE           = BLPAPI_DATATYPE_BYTE,           // Unsigned 8 bit value
      INT32          = BLPAPI_DATATYPE_INT32,          // 32 bit Integer
      INT64          = BLPAPI_DATATYPE_INT64,          // 64 bit Integer
      FLOAT32        = BLPAPI_DATATYPE_FLOAT32,        // 32 bit Floating point
      FLOAT64        = BLPAPI_DATATYPE_FLOAT64,        // 64 bit Floating point
      STRING         = BLPAPI_DATATYPE_STRING,         // ASCIIZ string
      BYTEARRAY      = BLPAPI_DATATYPE_BYTEARRAY,      // Opaque binary data
      DATE           = BLPAPI_DATATYPE_DATE,           // Date
      TIME           = BLPAPI_DATATYPE_TIME,           // Timestamp
      DECIMAL        = BLPAPI_DATATYPE_DECIMAL,        // Currently Unsupported
      DATETIME       = BLPAPI_DATATYPE_DATETIME,       // Date and time
      ENUMERATION    = BLPAPI_DATATYPE_ENUMERATION,    // An opaque enumeration
      SEQUENCE       = BLPAPI_DATATYPE_SEQUENCE,       // Sequence type
      CHOICE         = BLPAPI_DATATYPE_CHOICE,         // Choice type
      CORRELATION_ID = BLPAPI_DATATYPE_CORRELATION_ID  // Used for some
                                                       // internal messages
    };
};

typedef blpapi_Bool_t Bool;
typedef blpapi_Char_t Char;
typedef blpapi_UChar_t UChar;
typedef blpapi_Int16_t Int16;
typedef blpapi_UInt16_t UInt16;
typedef blpapi_Int32_t Int32;
typedef blpapi_UInt32_t UInt32;
typedef blpapi_Int64_t Int64;
typedef blpapi_UInt64_t UInt64;
typedef blpapi_Float32_t Float32;
typedef blpapi_Float64_t Float64;

}  // close namespace blpapi
}  // close namespace BloombergLP

#endif // ifdef __cplusplus

#endif // #ifndef INCLUDED_BLPAPI_TYPES