Logo Search packages:      
Sourcecode: poco version File versions  Download package

Poco::DynamicAny Class Reference

#include <DynamicAny.h>

Collaboration diagram for Poco::DynamicAny:

List of all members.

Public Member Functions

template<typename T >
void convert (T &val) const
 Swaps the content of the this DynamicAny with the other DynamicAny.
template<typename T >
convert () const
template<typename T >
 DynamicAny (const T &val)
 Creates an empty DynamicAny.
 DynamicAny (const char *pVal)
 DynamicAny (const DynamicAny &other)
void empty ()
 Returns the type information of the stored content.
template<typename T >
const T & extract () const
bool isArray () const
 Logical AND operator operator overload for DynamicAny.
bool isEmpty () const
 Empties DynamicAny.
bool isInteger () const
 Returns true if empty.
bool isNumeric () const
 Returns true if stored value is signed.
bool isSigned () const
 Returns true if stored value is integer.
bool isString () const
template<typename T >
 operator T () const
bool operator! () const
template<typename T >
bool operator!= (const T &other) const
 Equality operator overload for DynamicAny.
bool operator!= (const DynamicAny &other) const
bool operator!= (const char *other) const
 Inequality operator overload for DynamicAny.
template<typename T >
bool operator&& (const T &other) const
 Logical OR operator operator overload for DynamicAny.
bool operator&& (const DynamicAny &other) const
template<typename T >
const DynamicAny operator* (const T &other) const
 Subtraction assignment operator overload for DynamicAny.
const DynamicAny operator* (const DynamicAny &other) const
template<typename T >
DynamicAnyoperator*= (const T &other)
 Multiplication operator overload for DynamicAny.
DynamicAnyoperator*= (const DynamicAny &other)
template<typename T >
const DynamicAny operator+ (const T &other) const
 Assignment operator specialization for DynamicAny.
const DynamicAny operator+ (const DynamicAny &other) const
const DynamicAny operator+ (const char *other) const
 Addition operator specialization for DynamicAny.
DynamicAnyoperator++ ()
 Addition operator specialization for adding const char* to DynamicAny.
const DynamicAny operator++ (int)
 Pre-increment operator.
template<typename T >
DynamicAnyoperator+= (const T &other)
 Post-decrement operator.
DynamicAnyoperator+= (const DynamicAny &other)
DynamicAnyoperator+= (const char *other)
 Addition assignment operator overload for DynamicAny.
template<typename T >
const DynamicAny operator- (const T &other) const
 Addition assignment operator overload for const char*.
const DynamicAny operator- (const DynamicAny &other) const
DynamicAnyoperator-- ()
 Post-increment operator.
const DynamicAny operator-- (int)
 Pre-decrement operator.
template<typename T >
DynamicAnyoperator-= (const T &other)
 Subtraction operator overload for DynamicAny.
DynamicAnyoperator-= (const DynamicAny &other)
template<typename T >
const DynamicAny operator/ (const T &other) const
 Multiplication assignment operator overload for DynamicAny.
const DynamicAny operator/ (const DynamicAny &other) const
template<typename T >
DynamicAnyoperator/= (const T &other)
 Division operator overload for DynamicAny.
DynamicAnyoperator/= (const DynamicAny &other)
template<typename T >
bool operator< (const T &other) const
 Inequality operator overload for const char*.
bool operator< (const DynamicAny &other) const
template<typename T >
bool operator<= (const T &other) const
 Less than operator overload for DynamicAny.
bool operator<= (const DynamicAny &other) const
template<typename T >
DynamicAnyoperator= (const T &other)
 Assignment operator for assigning POD to DynamicAny.
DynamicAnyoperator= (const DynamicAny &other)
 Logical NOT operator.
template<typename T >
bool operator== (const T &other) const
 Division assignment operator specialization for DynamicAny.
bool operator== (const char *other) const
bool operator== (const DynamicAny &other) const
 Equality operator overload for const char*.
template<typename T >
bool operator> (const T &other) const
 Less than or equal operator overload for DynamicAny.
bool operator> (const DynamicAny &other) const
template<typename T >
bool operator>= (const T &other) const
 Greater than operator overload for DynamicAny.
bool operator>= (const DynamicAny &other) const
template<typename T >
DynamicAnyoperator[] (T n)
 Returns true if DynamicAny represents a vector.
template<typename T >
const DynamicAnyoperator[] (T n) const
template<typename T >
bool operator|| (const T &other) const
 Greater than or equal operator overload for DynamicAny.
bool operator|| (const DynamicAny &other) const
void swap (DynamicAny &other)
 Destroys the DynamicAny.
const std::type_info & type () const
 ~DynamicAny ()
 Copy constructor.

Private Member Functions

template<typename T >
add (const DynamicAny &other) const
 Returns true if stored value is std::string.
template<typename T >
divide (const DynamicAny &other) const
template<typename T , typename E >
DynamicAnyHolderImpl< T > * holderImpl (const std::string errorMessage="") const
template<typename T >
multiply (const DynamicAny &other) const
template<typename T >
subtract (const DynamicAny &other) const

Private Attributes

DynamicAnyHolder_pHolder

Detailed Description

DynamicAny allows to store data of different types and to convert between these types transparently. DynamicAny puts forth the best effort to provide intuitive and reasonable conversion semantics and prevent unexpected data loss, particularly when performing narrowing or signedness conversions of numeric data types.

An attempt to convert or extract from a non-initialized (empty) DynamicAny variable shall result in an exception being thrown.

Loss of signedness is not allowed for numeric values. This means that if an attempt is made to convert the internal value which is a negative signed integer to an unsigned integer type storage, a RangeException is thrown. Overflow is not allowed, so if the internal value is a larger number than the target numeric type size can accomodate, a RangeException is thrown.

Precision loss, such as in conversion from floating-point types to integers or from double to float on platforms where they differ in size (provided internal actual value fits in float min/max range), is allowed.

String truncation is allowed -- it is possible to convert between string and character when string length is greater than 1. An empty string gets converted to the char '\0', a non-empty string is truncated to the first character.

Boolean conversion is performed as follows:

A string value "false" (not case sensitive), "0" or "" (empty string) can be converted to a boolean value false, any other string not being false by the above criteria evaluates to true (e.g: "hi" -> true). Integer 0 values are false, everything else is true. Floating point values equal to the minimal FP representation on a given platform are false, everything else is true.

Arithmetic operations with POD types as well as between DynamicAny's are supported, subject to following limitations:

  • for std::string and const char* values, only '+' and '+=' operations are supported
  • for integral and floating point numeric values, following operations are supported: '+', '+=', '-', '-=', '*', '*=' , '/' and '/='
  • for integral values, following operations are supported: prefix and postfix increment (++) and decement (--)
  • for all other types, InvalidArgumentException is thrown upon attempt of an arithmetic operation

A DynamicAny can be created from and converted to a value of any type for which a specialization of DynamicAnyHolderImpl is available. For supported types, see DynamicAnyHolder documentation.

Definition at line 52 of file DynamicAny.h.


The documentation for this class was generated from the following files:

Generated by  Doxygen 1.6.0   Back to index