/* 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_element.h -*-C++-*-
#ifndef INCLUDED_BLPAPI_ELEMENT
#define INCLUDED_BLPAPI_ELEMENT
//@PURPOSE: Provide a representation of an item in a message.
//
//@CLASSES:
// blpapi::Element: Represents an item in a message
//
//@DESCRIPTION: This component implements a representation of an item in a
// 'Message'.
#ifndef INCLUDED_BLPAPI_CALL
#include <blpapi_call.h>
#endif
#ifndef INCLUDED_BLPAPI_TYPES
#include <blpapi_types.h>
#endif
#ifndef INCLUDED_BLPAPI_SCHEMA
#include <blpapi_schema.h>
#endif
#ifndef INCLUDED_BLPAPI_DATETIME
#include <blpapi_datetime.h>
#endif
#ifndef INCLUDED_BLPAPI_NAME
#include <blpapi_name.h>
#endif
#ifndef INCLUDED_BLPAPI_DEFS
#include <blpapi_defs.h>
#endif
#ifndef INCLUDED_BLPAPI_STREAMPROXY
#include <blpapi_streamproxy.h>
#endif
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif
BLPAPI_EXPORT blpapi_Name_t*
blpapi_Element_name(const blpapi_Element_t *element);
BLPAPI_EXPORT const char*
blpapi_Element_nameString(const blpapi_Element_t *element);
BLPAPI_EXPORT blpapi_SchemaElementDefinition_t*
blpapi_Element_definition(const blpapi_Element_t* element);
BLPAPI_EXPORT int blpapi_Element_datatype (
const blpapi_Element_t* element);
BLPAPI_EXPORT int blpapi_Element_isComplexType(
const blpapi_Element_t* element);
BLPAPI_EXPORT int blpapi_Element_isArray(
const blpapi_Element_t* element);
BLPAPI_EXPORT int blpapi_Element_isReadOnly(
const blpapi_Element_t* element);
BLPAPI_EXPORT size_t blpapi_Element_numValues(
const blpapi_Element_t* element);
BLPAPI_EXPORT size_t blpapi_Element_numElements(
const blpapi_Element_t* element);
BLPAPI_EXPORT int blpapi_Element_isNullValue(
const blpapi_Element_t* element,
size_t position);
BLPAPI_EXPORT int blpapi_Element_isNull(
const blpapi_Element_t* element);
BLPAPI_EXPORT int blpapi_Element_print(
const blpapi_Element_t* element,
blpapi_StreamWriter_t streamWriter,
void *stream,
int level,
int spacesPerLevel);
BLPAPI_EXPORT
int blpapi_Element_getElementAt(
const blpapi_Element_t* element,
blpapi_Element_t **result,
size_t position);
BLPAPI_EXPORT
int blpapi_Element_getElement(
const blpapi_Element_t *element,
blpapi_Element_t **result,
const char* nameString,
const blpapi_Name_t *name);
BLPAPI_EXPORT
int blpapi_Element_hasElement(
const blpapi_Element_t *element,
const char* nameString,
const blpapi_Name_t *name);
BLPAPI_EXPORT
int blpapi_Element_hasElementEx(
const blpapi_Element_t *element,
const char* nameString,
const blpapi_Name_t *name,
int excludeNullElements,
int reserved);
BLPAPI_EXPORT
int blpapi_Element_getValueAsBool(
const blpapi_Element_t *element,
blpapi_Bool_t *buffer,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_getValueAsChar(
const blpapi_Element_t *element,
blpapi_Char_t *buffer,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_getValueAsInt32(
const blpapi_Element_t *element,
blpapi_Int32_t *buffer,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_getValueAsInt64(
const blpapi_Element_t *element,
blpapi_Int64_t *buffer,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_getValueAsFloat32(
const blpapi_Element_t *element,
blpapi_Float32_t *buffer,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_getValueAsFloat64(
const blpapi_Element_t *element,
blpapi_Float64_t *buffer,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_getValueAsString(
const blpapi_Element_t *element,
const char **buffer,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_getValueAsDatetime(
const blpapi_Element_t *element,
blpapi_Datetime_t *buffer,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_getValueAsHighPrecisionDatetime(
const blpapi_Element_t *element,
blpapi_HighPrecisionDatetime_t *buffer,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_getValueAsElement(
const blpapi_Element_t *element,
blpapi_Element_t **buffer,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_getValueAsName(
const blpapi_Element_t *element,
blpapi_Name_t **buffer,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_getChoice(
const blpapi_Element_t *element,
blpapi_Element_t **result);
BLPAPI_EXPORT
int blpapi_Element_setValueBool(
blpapi_Element_t *element,
blpapi_Bool_t value,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_setValueChar(
blpapi_Element_t *element,
blpapi_Char_t value,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_setValueInt32(
blpapi_Element_t *element,
blpapi_Int32_t value,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_setValueInt64(
blpapi_Element_t *element,
blpapi_Int64_t value,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_setValueFloat32(
blpapi_Element_t *element,
blpapi_Float32_t value,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_setValueFloat64(
blpapi_Element_t *element,
blpapi_Float64_t value,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_setValueString(
blpapi_Element_t *element,
const char *value,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_setValueDatetime(
blpapi_Element_t *element,
const blpapi_Datetime_t *value,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_setValueHighPrecisionDatetime(
blpapi_Element_t *element,
const blpapi_HighPrecisionDatetime_t *value,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_setValueFromElement(
blpapi_Element_t *element,
blpapi_Element_t *value,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_setValueFromName (
blpapi_Element_t *element,
const blpapi_Name_t *value,
size_t index);
BLPAPI_EXPORT
int blpapi_Element_setElementBool(
blpapi_Element_t *element,
const char* nameString,
const blpapi_Name_t* name,
blpapi_Bool_t value);
BLPAPI_EXPORT
int blpapi_Element_setElementChar(
blpapi_Element_t *element,
const char* nameString,
const blpapi_Name_t* name,
blpapi_Char_t value);
BLPAPI_EXPORT
int blpapi_Element_setElementInt32(
blpapi_Element_t *element,
const char* nameString,
const blpapi_Name_t* name,
blpapi_Int32_t value);
BLPAPI_EXPORT
int blpapi_Element_setElementInt64(
blpapi_Element_t *element,
const char* nameString,
const blpapi_Name_t* name,
blpapi_Int64_t value);
BLPAPI_EXPORT
int blpapi_Element_setElementFloat32(
blpapi_Element_t *element,
const char* nameString,
const blpapi_Name_t* name,
blpapi_Float32_t value);
BLPAPI_EXPORT
int blpapi_Element_setElementFloat64(
blpapi_Element_t *element,
const char* nameString,
const blpapi_Name_t* name,
blpapi_Float64_t value);
BLPAPI_EXPORT
int blpapi_Element_setElementString(
blpapi_Element_t *element,
const char *nameString,
const blpapi_Name_t* name,
const char *value);
BLPAPI_EXPORT
int blpapi_Element_setElementDatetime(
blpapi_Element_t *element,
const char* nameString,
const blpapi_Name_t* name,
const blpapi_Datetime_t *value);
BLPAPI_EXPORT
int blpapi_Element_setElementHighPrecisionDatetime(
blpapi_Element_t *element,
const char *nameString,
const blpapi_Name_t *name,
const blpapi_HighPrecisionDatetime_t *value);
BLPAPI_EXPORT
int blpapi_Element_setElementFromField(
blpapi_Element_t *element,
const char* nameString,
const blpapi_Name_t* name,
blpapi_Element_t *sourcebuffer);
BLPAPI_EXPORT
int blpapi_Element_setElementFromName (
blpapi_Element_t *element,
const char* elementName,
const blpapi_Name_t* name,
const blpapi_Name_t *buffer);
BLPAPI_EXPORT
int blpapi_Element_appendElement (
blpapi_Element_t *element,
blpapi_Element_t **appendedElement);
BLPAPI_EXPORT
int blpapi_Element_setChoice (
blpapi_Element_t *element,
blpapi_Element_t **resultElement,
const char* nameCstr,
const blpapi_Name_t* name,
size_t index);
#ifdef __cplusplus
}
#ifndef INCLUDED_BLPAPI_EXCEPTION
#include <blpapi_exception.h>
#endif
#ifndef INCLUDED_STRING
#include <string>
#define INCLUDED_STRING
#endif
namespace BloombergLP {
namespace blpapi {
// =============
// class Element
// =============
class Element {
// Element represents an item in a message.
//
// An Element can represent: a single value of any data type supported by
// the Bloomberg API; an array of values; a sequence or a choice.
//
// The value(s) in an Element can be queried in a number of ways. For an
// Element which represents a single value or an array of values use the
// getValueAs() functions or getValueAsBool() etc. For an Element which
// represents a sequence or choice use getElementAsBool() etc. In addition,
// for choices and sequences, hasElement() and getElement() are useful.
//
// This example shows how to access the value of a scalar element 's' as a
// floating point number:
//..
// float f = s.getValueAsFloat32();
//..
// Similarly, this example shows how to retrieve the third value in an
// array element 'a', as a floating pointer number:
//..
// float f = a.getValueAsFloat32(2);
//..
// Use numValues() to determine the number of values available. For single
// values, it will return either 0 or 1. For arrays it will return the
// actual number of values in the array.
//
// To retrieve values from a complex element types (sequences and choices)
// use the getElementAs...() family of methods. This example shows how to
// get the value of the element 'city' in the sequence element 'address':
//..
// const char* city = address.getElementAsString("city");
//..
// The value(s) of an Element can be set in a number of ways. For an
// Element which represents a single value or an array of values use the
// setValue() or appendValue() functions. For an element which represents a
// sequence or a choice use the setElement() functions.
//
// This example shows how to set the value of an Element 's' from an
// integer:
//..
// Int32 value=5;
// s.setValue(value);
//..
// This example shows how to append an integer a value to an array element
// 'a':
//..
// Int32 value=5;
// s.appendValue(value);
//..
// To set values in a complex element (a sequence or a choice) use the
// setElement() family of functions. This example shows how to set the
// value of the element 'city' in the sequence element 'address' to a
// string.
//..
// Element address;
// ...
// address.setElement("city", "New York");
//..
// Methods which specify a Element name come in two forms. One which takes
// a Name as a parameter and one which takes a const char*. The form which
// takes Name is more efficient. However, it requires the Name to have been
// created in the global name table.
//
// The form which takes a const char* is less efficient but will not cause
// a new Name to be created in the global Name table. Because all valid
// Element names will have already been placed in the global name table by
// the API if the supplied string cannot be found in the global name table
// the appropriate error or exception can be returned.
//
// The API will convert data types as long as there is no loss of precision
// involved. So:
//
// - A BOOL can be returned as bool, char, Int32, Int64, Float32, Float64,
// std::string (the string will be "true" or "false")
//
// - A BOOL can be set from bool, std::string (if it has a value of "y",
// "n", "yes", "no", "true" or "false")
//
// - A CHAR can be returned as char, Int32, Int64, Float32, Float64,
// std::string
//
// - A CHAR can be set from char
//
// - An INT32 can be returned as Int32, Int64, Float64, std::string
//
// - An INT32 can be set from char, Int32
//
// - An INT64 can be returned as Int64, std::string
//
// - An INT64 can be set from char, Int32, Int64
//
// - A FLOAT32 can be returned as Float32, Float64, std::string
//
// - A FLOAT32 can be set from char
//
// - A FLOAT64 can be returned as Float64, std::string
//
// - A FLOAT64 can be set from char, Int32, Float32
//
// - A STRING can be returned as std::string, Name
//
// - A STRING can be set from bool (the string will be set to
// "true" or "false"), char, Int32, Int64, Float32, Float64, Name
//
// - A DATETIME can be returned as Datetime
//
// - A DATETIME can be set from Datetime
blpapi_Element_t *d_handle_p;
public:
Element();
// Create an uninitialized Element. The only valid operations to
// perform on an unitialized Element are assignment, isValid() and
// destruction.
Element(blpapi_Element_t *element);
// MANIPULATORS
void rebind(blpapi_Element_t *element);
void setElement(const char* name, bool value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined unless 'name' is a valid null-terminated string.
void setElement(const char* name, char value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined unless 'name' is a valid null-terminated string.
void setElement(const char* name, Int32 value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined unless 'name' is a valid null-terminated string.
void setElement(const char* name, Int64 value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined unless 'name' is a valid null-terminated string.
void setElement(const char* name, Float32 value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined unless 'name' is a valid null-terminated string.
void setElement(const char* name, Float64 value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined unless 'name' is a valid null-terminated string.
void setElement(const char* name, const Datetime& value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined unless 'name' is a valid null-terminated string.
void setElement(const char* name, const char* value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined unless 'name' is a valid null-terminated string.
void setElement(const char* name, const Name& value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined unless 'name' is a valid null-terminated string.
void setElement(const Name& name, bool value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined if 'name' is uninitialized.
void setElement(const Name& name, char value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined if 'name' is uninitialized.
void setElement(const Name& name, Int32 value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined if 'name' is uninitialized.
void setElement(const Name& name, Int64 value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined if 'name' is uninitialized.
void setElement(const Name& name, Float32 value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined if 'name' is uninitialized.
void setElement(const Name& name, Float64 value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined if 'name' is uninitialized.
void setElement(const Name& name, const Datetime& value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined if 'name' is uninitialized.
void setElement(const Name& name, const char* value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined if 'name' is uninitialized.
void setElement(const Name& name, const Name& value);
// Set the specified element 'name' within this sequence or choice
// Element to the specified 'value'. An exception is thrown if the
// specified 'name' is not valid for this Element, or if the Element
// identified by the specified 'name' cannot be initialized from the
// type of the specified 'value'. The behavior of this function is
// undefined if 'name' is uninitialized.
void setValue(bool value, size_t index=0);
// Set the value of the specified 'index'th entry in this Element to
// the specified 'value'. An exception is thrown if this Element's
// DataType means it cannot be initialized from an instance of the
// supplied 'value'. An exception is thrown if 'index >= numValues()'.
void setValue(char value, size_t index=0);
// Set the value of the specified 'index'th entry in this Element to
// the specified 'value'. An exception is thrown if this Element's
// DataType means it cannot be initialized from an instance of the
// supplied 'value'. An exception is thrown if 'index >= numValues()'.
void setValue(Int32 value, size_t index=0);
// Set the value of the specified 'index'th entry in this Element to
// the specified 'value'. An exception is thrown if this Element's
// DataType means it cannot be initialized from an instance of the
// supplied 'value'. An exception is thrown if 'index >= numValues()'.
void setValue(Int64 value, size_t index=0);
// Set the value of the specified 'index'th entry in this Element to
// the specified 'value'. An exception is thrown if this Element's
// DataType means it cannot be initialized from an instance of the
// supplied 'value'. An exception is thrown if 'index >= numValues()'.
void setValue(Float32 value, size_t index=0);
// Set the value of the specified 'index'th entry in this Element to
// the specified 'value'. An exception is thrown if this Element's
// DataType means it cannot be initialized from an instance of the
// supplied 'value'. An exception is thrown if 'index >= numValues()'.
void setValue(Float64 value, size_t index=0);
// Set the value of the specified 'index'th entry in this Element to
// the specified 'value'. An exception is thrown if this Element's
// DataType means it cannot be initialized from an instance of the
// supplied 'value'. An exception is thrown if 'index >= numValues()'.
void setValue(const Datetime& value, size_t index=0);
// Set the value of the specified 'index'th entry in this Element to
// the specified 'value'. An exception is thrown if this Element's
// DataType means it cannot be initialized from an instance of the
// supplied 'value'. An exception is thrown if 'index >= numValues()'.
void setValue(const char* value, size_t index=0);
// Set the value of the specified 'index'th entry in this Element to
// the specified 'value'. An exception is thrown if this Element's
// DataType means it cannot be initialized from an instance of the
// supplied 'value'. An exception is thrown if 'index >= numValues()'.
void setValue(const Name& valueName, size_t index=0);
// Set the value of the specified 'index'th entry in this Element to
// the specified 'value'. An exception is thrown if this Element's
// DataType means it cannot be initialized from an instance of the
// supplied 'value'. An exception is thrown if 'index >= numValues()'.
void appendValue(bool value);
// Appends the specified 'value' to this Element as the last element.
// An exception is thrown if this Element's DataType means it cannot be
// initialized from an instance of the supplied 'value', or if the
// current size of this Element ('numValues()') is equal to the maximum
// defined by 'elementDefinition().maxValues()'.
void appendValue(char value);
// Appends the specified 'value' to this Element as the last element.
// An exception is thrown if this Element's DataType means it cannot be
// initialized from an instance of the supplied 'value', or if the
// current size of this Element ('numValues()') is equal to the maximum
// defined by 'elementDefinition().maxValues()'.
void appendValue(Int32 value);
// Appends the specified 'value' to this Element as the last element.
// An exception is thrown if this Element's DataType means it cannot be
// initialized from an instance of the supplied 'value', or if the
// current size of this Element ('numValues()') is equal to the maximum
// defined by 'elementDefinition().maxValues()'.
void appendValue(Int64 value);
// Appends the specified 'value' to this Element as the last element.
// An exception is thrown if this Element's DataType means it cannot be
// initialized from an instance of the supplied 'value', or if the
// current size of this Element ('numValues()') is equal to the maximum
// defined by 'elementDefinition().maxValues()'.
void appendValue(Float32 value);
// Appends the specified 'value' to this Element as the last element.
// An exception is thrown if this Element's DataType means it cannot be
// initialized from an instance of the supplied 'value', or if the
// current size of this Element ('numValues()') is equal to the maximum
// defined by 'elementDefinition().maxValues()'.
void appendValue(Float64 value);
// Appends the specified 'value' to this Element as the last element.
// An exception is thrown if this Element's DataType means it cannot be
// initialized from an instance of the supplied 'value', or if the
// current size of this Element ('numValues()') is equal to the maximum
// defined by 'elementDefinition().maxValues()'.
void appendValue(const Datetime& value);
// Appends the specified 'value' to this Element as the last element.
// An exception is thrown if this Element's DataType means it cannot be
// initialized from an instance of the supplied 'value', or if the
// current size of this Element ('numValues()') is equal to the maximum
// defined by 'elementDefinition().maxValues()'.
void appendValue(const char* value);
// Appends the specified 'value' to this Element as the last element.
// An exception is thrown if this Element's DataType means it cannot be
// initialized from an instance of the supplied 'value', or if the
// current size of this Element ('numValues()') is equal to the maximum
// defined by 'elementDefinition().maxValues()'.
void appendValue(const Name& value);
// Appends the specified 'value' to this Element as the last element.
// An exception is thrown if this Element's DataType means it cannot be
// initialized from an instance of the supplied 'value', or if the
// current size of this Element ('numValues()') is equal to the maximum
// defined by 'elementDefinition().maxValues()'.
Element appendElement();
// If this Element is an array of sequence or choice Elements, then
// append an element to this element and return the appended element;
// otherwise an exception is thrown.
Element setChoice(const char* selectionName);
// If 'datatype() == DataType::CHOICE' and the specified
// 'selectionName' is valid for this Element, then set the active
// Element to the one specified by 'selectionName' and return it;
// otherwise an exception is thrown.
Element setChoice(const Name& selectionName);
// If 'datatype() == DataType::CHOICE' and the specified
// 'selectionName' is value for this Element, then set the active
// Element to the one specified by 'selectionName' and return it;
// otherwise an exception is thrown.
blpapi_Element_t* handle();
// ACCESSORS
Name name() const;
// If this Element is part of a sequence or choice Element then return
// the Name of this Element within the sequence or choice Element that
// owns it. If this Element is not part of a sequence Element (that is
// it is an entire Request or Message) then return the Name of the
// Request or Message.
int datatype() const;
// Return the basic data type used to represent a value in this
// element. The possible return values are enumerated in
// 'blpapi_datatype'.
bool isComplexType() const;
// Return true if 'datatype() == DataType::SEQUENCE' or
// 'datatype() == DataType::CHOICE' and false otherwise.
bool isArray() const;
// Return true if 'elementDefinition().maxValues() > 1' or
// 'elementDefinition().maxValues() == UNBOUNDED', and false otherwise.
bool isNull() const;
// Return true if this element has a null value, and false otherwise.
bool isReadOnly() const;
// Return true if this element cannot be modified, and false otherwise.
SchemaElementDefinition elementDefinition() const;
// Return a reference to the read-only element definition object that
// defines the properties of this elements value.
size_t numValues() const;
// Return the number of values contained by this element. The number of
// values is 0 if 'isNull()' returns true, and no greater than 1 if
// 'isComplexType()' returns true. The value returned will always be in
// the range defined by 'elementDefinition().minValues()' and
// 'elementDefinition().maxValues()'.
size_t numElements() const;
// Return the number of elements contained by this element. The number
// of elements is 0 if 'isComplex()' returns false, and no greater than
// 1 if the Datatype is CHOICE; if the DataType is SEQUENCE this may
// return any number (including 0).
bool isValid() const;
// Return true if this Element is valid. An Element created using the
// default constructor is not valid until it has had a value assigned
// to it.
bool isNullValue(size_t position = 0) const;
// Return true if the value of the sub-element at the specified
// 'position' in a sequence or choice element is a null value. An
// exception is thrown if 'position >= numElements()'.
bool hasElement(const char* name, bool excludeNullElements = false) const;
bool hasElement(const Name& name, bool excludeNullElements = false) const;
// Return true if this Element is a choice or sequence
// ('isComplexType() == true') and it contains an Element with the
// specified 'name'.
int getValueAs(bool* result, size_t index=0) const;
// Set the specified 'result' to the value of the specified 'index'th
// entry in this Element and return 0. An error (non-zero) is returned
// if the DataType of this Element cannot be converted to the type of
// 'result' or if 'numValues() <= index'.
int getValueAs(char* result, size_t index=0) const;
// Set the specified 'result' to the value of the specified 'index'th
// entry in this Element and return 0. An error (non-zero) is returned
// if the DataType of this Element cannot be converted to the type of
// 'result' or if 'numValues() <= index'.
int getValueAs(Int32* result, size_t index=0) const;
// Set the specified 'result' to the value of the specified 'index'th
// entry in this Element and return 0. An error (non-zero) is returned
// if the DataType of this Element cannot be converted to the type of
// 'result' or if 'numValues() <= index'.
int getValueAs(Int64* result, size_t index=0) const;
// Set the specified 'result' to the value of the specified 'index'th
// entry in this Element and return 0. An error (non-zero) is returned
// if the DataType of this Element cannot be converted to the type of
// 'result' or if 'numValues() <= index'.
int getValueAs(Float32* result, size_t index=0) const;
// Set the specified 'result' to the value of the specified 'index'th
// entry in this Element and return 0. An error (non-zero) is returned
// if the DataType of this Element cannot be converted to the type of
// 'result' or if 'numValues() <= index'.
int getValueAs(Float64* result, size_t index=0) const;
// Set the specified 'result' to the value of the specified 'index'th
// entry in this Element and return 0. An error (non-zero) is returned
// if the DataType of this Element cannot be converted to the type of
// 'result' or if 'numValues() <= index'.
int getValueAs(Datetime* result, size_t index=0) const;
// Set the specified 'result' to the value of the specified 'index'th
// entry in this Element and return 0. An error (non-zero) is returned
// if the DataType of this Element cannot be converted to the type of
// 'result' or if 'numValues() <= index'. Note that this function will
// not necessarily set all fields of '*result' -- callers should check
// 'result->hasParts(...)' or 'result->parts()' before accessing the
// fields of 'result'.
int getValueAs(std::string* result, size_t index=0) const;
// Set the specified 'result' to the value of the specified 'index'th
// entry in this Element and return 0. An error (non-zero) is returned
// if the DataType of this Element cannot be converted to the type of
// 'result' or if 'numValues() <= index'.
int getValueAs(Element *result, size_t index=0) const;
// Set the specified 'result' to the value of the specified 'index'th
// entry in this Element and return 0. An error (non-zero) is returned
// if the DataType of this Element cannot be converted to the type of
// 'result' or if 'numValues() <= index'.
int getValueAs(Name *result, size_t index=0) const;
// Set the specified 'result' to the value of the specified 'index'th
// entry in this Element and return 0. An error (non-zero) is returned
// if the DataType of this Element cannot be converted to the type of
// 'result' or if 'numValues() <= index'.
bool getValueAsBool(size_t index=0) const;
// Return the specified 'index'th entry in the Element as a bool. An
// exception is thrown if the DataType of this Element cannot be
// converted to bool or if 'numValues() <= index'.
char getValueAsChar(size_t index=0) const;
// Return the specified 'index'th entry in the Element as a char. An
// exception is thrown if the DataType of this Element cannot be
// converted to char or if 'numValues() <= index'.
Int32 getValueAsInt32(size_t index=0) const;
// Return the specified 'index'th entry in the Element as a Int32. An
// exception is thrown if the DataType of this Element cannot be
// converted to Int32 or if 'numValues() <= index'.
Int64 getValueAsInt64(size_t index=0) const;
// Returns the specified 'index'th entry in the Element as a Int64. An
// exception is thrown if the DataType of this Element cannot be
// converted to Int64 or if 'numValues() <= index'.
Float32 getValueAsFloat32(size_t index=0) const;
// Returns the specified 'index'th entry in the Element as a Float32.
// An exception is thrown if the DataType of this Element cannot be
// converted to Float32 or if 'numValues() <= index'.
Float64 getValueAsFloat64(size_t index=0) const;
// Returns the specified 'index'th entry in the Element as a Float64.
// An exception is thrown if the DataType of this Element cannot be
// converted to Float64 or if 'numValues() <= index'.
Datetime getValueAsDatetime(size_t index=0) const;
// Returns the specified 'index'th entry in the Element as a Datetime.
// An exception is thrown if the DataType of this Element cannot be
// converted to Datetime or if 'numValues() <= index'. Note that this
// function will not necessarily set all fields of the returned value
// -- callers should check 'rv.hasParts(...)' or 'rv.parts()' before
// accessing the fields of the returned value 'rv'.
const char* getValueAsString(size_t index=0) const;
// Returns the specified 'index'th entry in the Element as a pointer to
// a null-terminated string. An exception is thrown if the DataType of
// this Element cannot be converted to a null-terminated string or if
// 'numValues() <= index'. The pointer returned remains valid until
// this Element is destroyed.
Element getValueAsElement(size_t index=0) const;
// Returns the specified 'index'th entry in the Element as an Element.
// An exception is thrown if the DataType of this Element cannot be
// converted to an Element or if 'numValues() <= index'.
Name getValueAsName(size_t index=0) const;
// Returns the specified 'index'th entry in the Element as a Name. An
// exception is thrown if the DataType of this Element cannot be
// converted to Name or if 'numValues() <= index'.
int getElement(Element* result, const char *name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' then load that
// element into the specified 'result' and return 0; otherwise, return
// an error (non-zero). The behavior of this function is undefined
// unless 'name' is a valid null-terminated string.
int getElement(Element* result, const Name& name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' then load that
// element into the specified 'result' and return 0; otherwise, return
// an error (non-zero). The behavior of this function is undefined if
// 'name' is uninitialized.
int getElement(Element *result, size_t position) const;
// If this Element is either a sequence or a choice and 'numElements()'
// is greater than the specified 'position', then load the element at
// 'position' into the specified 'result' and return 0; otherwise
// return an error (non-zero).
Element getElement(size_t position) const;
// If this Element is either a sequence or a choice and 'numElements()'
// is greater than the specified 'position' return the 'position'th
// element. Otherwise, an exception is thrown.
Element getElement(const Name& name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name', then return that
// Element. Otherwise, an exception is thrown. The behavior of this
// function is undefined if 'name' is uninitialized.
Element getElement(const char* name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name', then return that
// Element. Otherwise, an exception is thrown. The behavior of this
// function is undefined unless 'name' is a valid null-terminated
// string.
bool getElementAsBool(const char* name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as a bool then its value is returned. Otherwise an
// exception is thrown. The behavior of this function is undefined
// unless 'name' is a valid null-terminated string.
bool getElementAsBool(const Name& name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as a bool then its value is returned. Otherwise an
// exception is thrown. The behavior of this function is undefined
// if 'name' is uninitialized.
char getElementAsChar(const char* name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as a char then its value is returned. Otherwise an
// exception is thrown. The behavior of this function is undefined
// unless 'name' is a valid null-terminated string.
char getElementAsChar(const Name& name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as a char then its value is returned. Otherwise an
// exception is thrown. The behavior of this function is undefined
// if 'name' is uninitialized.
Int32 getElementAsInt32(const char* name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as an Int32 then its value is returned. Otherwise an
// exception is thrown. The behavior of this function is undefined
// unless 'name' is a valid null-terminated string.
Int32 getElementAsInt32(const Name& name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as an Int32 then its value is returned. Otherwise an
// exception is thrown. The behavior of this function is undefined
// if 'name' is uninitialized.
Int64 getElementAsInt64(const char* name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as an Int64 then its value is returned. Otherwise an
// exception is thrown. The behavior of this function is undefined
// unless 'name' is a valid null-terminated string.
Int64 getElementAsInt64(const Name& name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as an Int64 then its value is returned. Otherwise an
// exception is thrown. The behavior of this function is undefined
// if 'name' is uninitialized.
Float32 getElementAsFloat32(const char* name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as a Float32 then its value is returned. Otherwise an
// exception is thrown. The behavior of this function is undefined
// unless 'name' is a valid null-terminated string.
Float32 getElementAsFloat32(const Name& name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as a Float32 then its value is returned. Otherwise an
// exception is thrown. The behavior of this function is undefined
// if 'name' is uninitialized.
Float64 getElementAsFloat64(const char* name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as a Float64 then its value is returned. Otherwise an
// exception is thrown. The behavior of this function is undefined
// unless 'name' is a valid null-terminated string.
Float64 getElementAsFloat64(const Name& name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as a Float64 then its value is returned. Otherwise an
// exception is thrown. The behavior of this function is undefined
// if 'name' is uninitialized.
Datetime getElementAsDatetime(const char* name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as a Datetime then its value is returned. Otherwise an
// exception is thrown. The behavior of this function is undefined
// unless 'name' is a valid null-terminated string. Note this function
// will not necessarily set all fields of the returned value -- callers
// should check 'rv.hasParts(...)' or 'rv.parts()' before accessing the
// fields of the returned value 'rv'.
Datetime getElementAsDatetime(const Name& name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as Datetime then its value is returned. Otherwise an
// exception is thrown. The behavior of this function is undefined
// if 'name' is uninitialized. Note that this function will not
// necessarily set all fields of the returned value -- callers should
// check 'rv.hasParts(...)' or 'rv.parts()' before accessing the fields
// of the returned value 'rv'.
const char* getElementAsString(const char* name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as a null-terminated string then a pointer to a string is
// returned. The pointer remains valid until this Element is destroyed.
// Otherwise an exception is thrown. The behavior of this function is
// undefined unless 'name' is a valid null-terminated string.
const char* getElementAsString(const Name& name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as a null-terminated string then a pointer to a string is
// returned. The pointer remains valid until this Element is destroyed.
// Otherwise an exception is thrown. The behavior of this function is
// undefined if 'name' is uninitialized.
Name getElementAsName(const char* name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as a Name then its value is returned. Otherwise an
// exception is thrown. The behavior of this function is undefined
// unless 'name' is a valid null-terminated string.
Name getElementAsName(const Name& name) const;
// If this Element is either a sequence or a choice and contains a
// valid Element identified by the specified 'name' which can be
// returned as a Name then its value is returned. Otherwise an
// exception is thrown. The behavior of this function is undefined
// if 'name' is uninitialized.
Element getChoice() const;
// Return the selection name of this element if this element is a
// "choice" element. Otherwise, an exception is thrown.
const blpapi_Element_t* handle() const;
std::ostream& print(std::ostream& stream,
int level=0,
int spacesPerLevel=4) const;
// Format this Element to the specified output 'stream' at the
// (absolute value of) the optionally specified indentation 'level' and
// return a reference to 'stream'. If 'level' is specified, optionally
// specify 'spacesPerLevel', the number of spaces per indentation level
// for this and all of its nested objects. If 'level' is negative,
// suppress indentation of the first line. If 'spacesPerLevel' is
// negative, format the entire output on one line, suppressing all but
// the initial indentation (as governed by 'level').
};
// FREE OPERATORS
std::ostream& operator<<(std::ostream& stream, const Element &element);
// Write the value of the specified 'element' object to the specified
// output 'stream' in a single-line format, and return a reference to
// 'stream'. If 'stream' is not valid on entry, this operation has no
// effect. Note that this human-readable format is not fully specified,
// can change without notice, and is logically equivalent to:
//..
// print(stream, 0, -1);
//..
// ============================================================================
// INLINE AND TEMPLATE FUNCTION IMPLEMENTATIONS
// ============================================================================
// -------------
// class Element
// -------------
inline
Element::Element()
: d_handle_p(0)
{
}
inline
Element::Element(blpapi_Element_t *newHandle)
: d_handle_p(newHandle)
{
}
inline
void Element::rebind(blpapi_Element_t *element)
{
d_handle_p = element;
}
inline
void Element::setElement(const char* elementName, bool value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setElementBool(d_handle_p,
elementName,
0,
value ? 1 : 0));
}
inline
void Element::setElement(const char* elementName, char value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setElementChar(d_handle_p, elementName, 0 , value));
}
inline
void Element::setElement(const char* elementName, Int32 value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setElementInt32(d_handle_p, elementName, 0 , value));
}
inline
void Element::setElement(const char* elementName, Int64 value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setElementInt64(d_handle_p, elementName, 0 , value));
}
inline
void Element::setElement(const char* elementName, Float32 value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setElementFloat32(d_handle_p, elementName, 0 , value));
}
inline
void Element::setElement(const char* elementName, Float64 value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setElementFloat64(d_handle_p, elementName, 0 , value));
}
inline
void Element::setElement(const char* elementName, const Datetime& value)
{
ExceptionUtil::throwOnError(
BLPAPI_CALL_ELEMENT_SETELEMENTHIGHPRECISIONDATETIME(
d_handle_p,
elementName,
0,
&value.rawHighPrecisionValue())
);
}
inline
void Element::setElement(const char* elementName, const char* value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setElementString(d_handle_p, elementName, 0 , value));
}
inline
void Element::setElement(const char* elementName, const Name& value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setElementFromName(d_handle_p,
elementName,
0,
value.impl()));
}
inline
void Element::setElement(const Name& elementName, bool value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setElementBool(d_handle_p,
0,
elementName.impl(),
value ? 1 : 0));
}
inline
void Element::setElement(const Name& elementName, char value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setElementChar(d_handle_p, 0, elementName.impl(), value));
}
inline
void Element::setElement(const Name& elementName, Int32 value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setElementInt32(d_handle_p,
0,
elementName.impl(),
value));
}
inline
void Element::setElement(const Name& elementName, Int64 value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setElementInt64(d_handle_p,
0,
elementName.impl(),
value));
}
inline
void Element::setElement(const Name& elementName, Float32 value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setElementFloat32(d_handle_p,
0,
elementName.impl(),
value));
}
inline
void Element::setElement(const Name& elementName, Float64 value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setElementFloat64(d_handle_p,
0,
elementName.impl(),
value));
}
inline
void Element::setElement(const Name& elementName, const Datetime& value)
{
ExceptionUtil::throwOnError(
BLPAPI_CALL_ELEMENT_SETELEMENTHIGHPRECISIONDATETIME(
d_handle_p,
0,
elementName.impl(),
&value.rawHighPrecisionValue())
);
}
inline
void Element::setElement(const Name& elementName, const char* value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setElementString(d_handle_p,
0,
elementName.impl(),
value));
}
inline
void Element::setElement(const Name& elementName, const Name& value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setElementFromName(d_handle_p,
0,
elementName.impl(),
value.impl()));
}
inline
void Element::setValue(bool value, size_t index)
{
ExceptionUtil::throwOnError(
blpapi_Element_setValueBool(d_handle_p, value, index));
}
inline
void Element::setValue(char value, size_t index)
{
ExceptionUtil::throwOnError(
blpapi_Element_setValueChar(d_handle_p, value, index));
}
inline
void Element::setValue(Int32 value, size_t index)
{
ExceptionUtil::throwOnError(
blpapi_Element_setValueInt32(d_handle_p, value, index));
}
inline
void Element::setValue(Int64 value, size_t index)
{
ExceptionUtil::throwOnError(
blpapi_Element_setValueInt64(d_handle_p, value, index));
}
inline
void Element::setValue(Float32 value, size_t index)
{
ExceptionUtil::throwOnError(
blpapi_Element_setValueFloat32(d_handle_p, value, index));
}
inline
void Element::setValue(Float64 value, size_t index)
{
ExceptionUtil::throwOnError(
blpapi_Element_setValueFloat64(d_handle_p, value, index));
}
inline
void Element::setValue(const Datetime& value, size_t index)
{
ExceptionUtil::throwOnError(
BLPAPI_CALL_ELEMENT_SETVALUEHIGHPRECISIONDATETIME(
d_handle_p,
&value.rawHighPrecisionValue(),
index)
);
}
inline
void Element::setValue(const char* value, size_t index)
{
ExceptionUtil::throwOnError(
blpapi_Element_setValueString(d_handle_p, value, index));
}
inline
void Element::setValue(const Name& valueName, size_t index)
{
ExceptionUtil::throwOnError(
blpapi_Element_setValueFromName(d_handle_p, valueName.impl(), index));
}
inline
void Element::appendValue(bool value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setValueBool(d_handle_p,
value,
BLPAPI_ELEMENT_INDEX_END));
}
inline
void Element::appendValue(char value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setValueChar(d_handle_p,
value,
BLPAPI_ELEMENT_INDEX_END));
}
inline
void Element::appendValue(Int32 value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setValueInt32(d_handle_p,
value,
BLPAPI_ELEMENT_INDEX_END));
}
inline
void Element::appendValue(Int64 value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setValueInt64(d_handle_p,
value,
BLPAPI_ELEMENT_INDEX_END));
}
inline
void Element::appendValue(Float32 value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setValueFloat32(d_handle_p,
value,
BLPAPI_ELEMENT_INDEX_END));
}
inline
void Element::appendValue(Float64 value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setValueFloat64(d_handle_p,
value,
BLPAPI_ELEMENT_INDEX_END));
}
inline
void Element::appendValue(const Datetime& value)
{
ExceptionUtil::throwOnError(
BLPAPI_CALL_ELEMENT_SETVALUEHIGHPRECISIONDATETIME(
d_handle_p,
&value.rawHighPrecisionValue(),
BLPAPI_ELEMENT_INDEX_END)
);
}
inline
void Element::appendValue(const char* value)
{
ExceptionUtil::throwOnError(
blpapi_Element_setValueString(d_handle_p,
value,
BLPAPI_ELEMENT_INDEX_END));
}
inline
void Element::appendValue(const Name& valueName)
{
ExceptionUtil::throwOnError(
blpapi_Element_setValueFromName(d_handle_p,
valueName.impl(),
BLPAPI_ELEMENT_INDEX_END));
}
inline
Element Element::appendElement()
{
blpapi_Element_t *appendedElement;
ExceptionUtil::throwOnError(
blpapi_Element_appendElement(d_handle_p, &appendedElement));
return Element(appendedElement);
}
inline
Element Element::setChoice(const char* selectionName)
{
blpapi_Element_t *resultElement;
ExceptionUtil::throwOnError(
blpapi_Element_setChoice(d_handle_p,
&resultElement,
selectionName,
0,
0));
return Element(resultElement);
}
inline
Element Element::setChoice(const Name& selectionName)
{
blpapi_Element_t *resultElement;
ExceptionUtil::throwOnError(
blpapi_Element_setChoice(d_handle_p,
&resultElement,
0,
selectionName.impl(),
0));
return Element(resultElement);
}
inline
blpapi_Element_t* Element::handle()
{
return d_handle_p;
}
inline
Name Element::name() const
{
return blpapi_Element_name(d_handle_p);
}
inline
int Element::getElement(Element* element, const char *nameString) const
{
blpapi_Element_t *fldt;
int rc = blpapi_Element_getElement(d_handle_p, &fldt, nameString, 0);
if (!rc) {
element->rebind(fldt);
}
return rc;
}
inline
int Element::getElement(Element* element, const Name& elementName) const
{
blpapi_Element_t *fldt;
int rc
= blpapi_Element_getElement(d_handle_p, &fldt, 0, elementName.impl());
if (!rc) {
element->rebind(fldt);
}
return rc;
}
inline
int Element::getElement(Element *element, size_t position) const
{
blpapi_Element_t *fldt;
int rc = blpapi_Element_getElementAt(d_handle_p, &fldt, position);
if (!rc) {
element->rebind(fldt);
}
return rc;
}
inline
int Element::datatype() const
{
return blpapi_Element_datatype(d_handle_p);
}
inline
bool Element::isComplexType() const
{
return blpapi_Element_isComplexType(d_handle_p) ? true : false;
}
inline
bool Element::isArray() const
{
return blpapi_Element_isArray(d_handle_p) ? true : false;
}
inline
bool Element::isNull() const
{
return blpapi_Element_isNull(d_handle_p) ? true : false;
}
inline
bool Element::isReadOnly() const
{
return blpapi_Element_isReadOnly(d_handle_p) ? true : false;
}
inline
SchemaElementDefinition Element::elementDefinition() const
{
return blpapi_Element_definition(d_handle_p);
}
inline
size_t Element::numValues() const
{
return blpapi_Element_numValues(d_handle_p);
}
inline
size_t Element::numElements() const
{
return blpapi_Element_numElements(d_handle_p);
}
inline
bool Element::isValid() const
{
return d_handle_p ? true : false;
}
inline
bool Element::isNullValue(size_t position) const
{
int rc = blpapi_Element_isNullValue(d_handle_p, position);
if (rc != 0 && rc != 1) {
ExceptionUtil::throwOnError(rc);
}
return rc ? true : false;
}
inline
bool Element::hasElement(const char* nameString,
bool excludeNullElements) const
{
if (excludeNullElements) {
return (blpapi_Element_hasElementEx(d_handle_p,
nameString, 0, excludeNullElements, 0) ? true : false);
}
return blpapi_Element_hasElement(d_handle_p, nameString, 0) ? true : false;
}
inline
bool Element::hasElement(const Name& elementName,
bool excludeNullElements) const
{
if (excludeNullElements) {
return (blpapi_Element_hasElementEx(d_handle_p, 0,
elementName.impl(), excludeNullElements, 0) ? true : false);
}
return blpapi_Element_hasElement(d_handle_p, 0, elementName.impl())
? true
: false;
}
inline
Element Element::getElement(const Name& elementName) const
{
blpapi_Element_t *fldt;
ExceptionUtil::throwOnError(
blpapi_Element_getElement(
d_handle_p,
&fldt,
0,
elementName.impl()));
return Element(fldt);
}
inline
Element Element::getElement(const char* elementName) const
{
blpapi_Element_t *fldt;
ExceptionUtil::throwOnError(
blpapi_Element_getElement(
d_handle_p,
&fldt,
elementName,
0));
return Element(fldt);
}
inline
Element Element::getElement(size_t position) const
{
blpapi_Element_t *element;
ExceptionUtil::throwOnError(
blpapi_Element_getElementAt(
d_handle_p,
&element,
position));
return Element(element);
}
inline
int Element::getValueAs(bool* buffer, size_t index) const
{
blpapi_Bool_t tmp=false;
int res = blpapi_Element_getValueAsBool(d_handle_p, &tmp, index);
*buffer = tmp ? true : false;
return res;
}
inline
int Element::getValueAs(char* buffer, size_t index) const
{
return blpapi_Element_getValueAsChar(d_handle_p, buffer, index);
}
inline
int Element::getValueAs(Int32* buffer, size_t index) const
{
return blpapi_Element_getValueAsInt32(d_handle_p, buffer, index);
}
inline
int Element::getValueAs(Int64* buffer, size_t index) const
{
return blpapi_Element_getValueAsInt64(d_handle_p,buffer, index);
}
inline
int Element::getValueAs(Float32* buffer, size_t index) const
{
return blpapi_Element_getValueAsFloat32(d_handle_p,buffer, index);
}
inline
int Element::getValueAs(Float64* buffer, size_t index) const
{
return blpapi_Element_getValueAsFloat64(d_handle_p,buffer, index);
}
inline
int Element::getValueAs(Datetime* buffer, size_t index) const
{
BLPAPI_CALL_ELEMENT_GETVALUEASHIGHPRECISIONDATETIME(d_handle_p,
buffer,
index);
}
inline
int Element::getValueAs(std::string* result, size_t index) const
{
const char* buffer;
int rc = blpapi_Element_getValueAsString(d_handle_p,&buffer, index);
if (!rc) {
*result = buffer;
}
return rc;
}
inline
int Element::getValueAs(Element *buffer, size_t index) const
{
return blpapi_Element_getValueAsElement(
d_handle_p,
&buffer->d_handle_p,
index);
}
inline
int Element::getValueAs(Name *buffer, size_t index) const
{
blpapi_Name_t* tmpName;
int res = blpapi_Element_getValueAsName(d_handle_p,
&tmpName,
index);
if (!res) {
*buffer = Name(tmpName);
}
return res;
}
inline
bool Element::getValueAsBool(size_t index) const
{
bool value;
ExceptionUtil::throwOnError(getValueAs(&value, index));
return value;
}
inline
char Element::getValueAsChar(size_t index) const
{
char value;
ExceptionUtil::throwOnError(getValueAs(&value, index));
return value;
}
inline
Int32 Element::getValueAsInt32(size_t index) const
{
Int32 value;
ExceptionUtil::throwOnError(getValueAs(&value, index));
return value;
}
inline
Int64 Element::getValueAsInt64(size_t index) const
{
Int64 value;
ExceptionUtil::throwOnError(getValueAs(&value, index));
return value;
}
inline
Float32 Element::getValueAsFloat32(size_t index) const
{
Float32 value;
ExceptionUtil::throwOnError(getValueAs(&value, index));
return value;
}
inline
Float64 Element::getValueAsFloat64(size_t index) const
{
Float64 value;
ExceptionUtil::throwOnError(getValueAs(&value, index));
return value;
}
inline
Datetime Element::getValueAsDatetime(size_t index) const
{
Datetime value;
ExceptionUtil::throwOnError(getValueAs(&value, index));
return value;
}
inline
const char* Element::getValueAsString(size_t index) const
{
const char* tmpStringBuffer;
ExceptionUtil::throwOnError(blpapi_Element_getValueAsString(
d_handle_p,
&tmpStringBuffer,
index));
return tmpStringBuffer;
}
inline
Element Element::getValueAsElement(size_t index) const
{
blpapi_Element_t *element;
ExceptionUtil::throwOnError(blpapi_Element_getValueAsElement(d_handle_p,
&element,
index));
return Element(element);
}
inline
Name Element::getValueAsName(size_t index) const
{
blpapi_Name_t *nameValue;
ExceptionUtil::throwOnError(blpapi_Element_getValueAsName(d_handle_p,
&nameValue,
index));
return nameValue;
}
inline
Element Element::getChoice() const
{
blpapi_Element_t *element;
ExceptionUtil::throwOnError(blpapi_Element_getChoice(d_handle_p,
&element));
return Element(element);
}
inline
bool Element::getElementAsBool(const char* elementName) const
{
return getElement(elementName).getValueAsBool();
}
inline
bool Element::getElementAsBool(const Name& elementName) const
{
return getElement(elementName).getValueAsBool();
}
inline
char Element::getElementAsChar(const char* elementName) const
{
return getElement(elementName).getValueAsChar();
}
inline
char Element::getElementAsChar(const Name& elementName) const
{
return getElement(elementName).getValueAsChar();
}
inline
Int32 Element::getElementAsInt32(const char* elementName) const
{
return getElement(elementName).getValueAsInt32();
}
inline
Int32 Element::getElementAsInt32(const Name& elementName) const
{
return getElement(elementName).getValueAsInt32();
}
inline
Int64 Element::getElementAsInt64(const char* elementName) const
{
return getElement(elementName).getValueAsInt64();
}
inline
Int64 Element::getElementAsInt64(const Name& elementName) const
{
return getElement(elementName).getValueAsInt64();
}
inline
Float32 Element::getElementAsFloat32(const char* elementName) const
{
return getElement(elementName).getValueAsFloat32();
}
inline
Float32 Element::getElementAsFloat32(const Name& elementName) const
{
return getElement(elementName).getValueAsFloat32();
}
inline
Float64 Element::getElementAsFloat64(const char* elementName) const
{
return getElement(elementName).getValueAsFloat64();
}
inline
Float64 Element::getElementAsFloat64(const Name& elementName) const
{
return getElement(elementName).getValueAsFloat64();
}
inline
Datetime Element::getElementAsDatetime(const char* elementName) const
{
return getElement(elementName).getValueAsDatetime();
}
inline
Datetime Element::getElementAsDatetime(const Name& elementName) const
{
return getElement(elementName).getValueAsDatetime();
}
inline
const char* Element::getElementAsString(const char* elementName) const
{
return getElement(elementName).getValueAsString();
}
inline
const char* Element::getElementAsString(const Name& elementName) const
{
return getElement(elementName).getValueAsString();
}
inline
Name Element::getElementAsName(const char* elementName) const
{
return getElement(elementName).getValueAsName();
}
inline
Name Element::getElementAsName(const Name& elementName) const
{
return getElement(elementName).getValueAsName();
}
inline
const blpapi_Element_t* Element::handle() const
{
return d_handle_p;
}
inline
std::ostream& Element::print(
std::ostream& stream,
int level,
int spacesPerLevel) const
{
blpapi_Element_print(d_handle_p,
StreamProxyOstream::writeToStream,
&stream,
level,
spacesPerLevel);
return stream;
}
inline
std::ostream& operator<<(std::ostream& stream, const Element& element)
{
element.print(stream, 0, -1);
return stream;
}
} // close namespace blpapi
} // close namespace BloombergLP
#endif // #ifdef __cplusplus
#endif // #ifndef INCLUDED_BLPAPI_ELEMENT