Poco::Dynamic

class VarHolder

Library: Foundation
Package: Dynamic
Header: Poco/Dynamic/VarHolder.h

Description

Interface for a data holder used by the Var class. Provides methods to convert between data types. Only data types for which VarHolder specialization exists are supported.

Provided are specializations for all C++ built-in types with addition of std::string, DateTime, LocalDateTime, Timestamp, std::vector<Var> and DynamicStruct.

Additional types can be supported by adding specializations. When implementing specializations, the only condition is that they reside in Poco namespace and implement the pure virtual functions clone() and type().

Those conversions that are not implemented shall fail back to this base class implementation. All the convert() function overloads in this class throw BadCastException.

Inheritance

Known Derived Classes: VarHolderImpl

Member Summary

Member Functions: clone, convert, convertSignedFloatToUnsigned, convertSignedToUnsigned, convertToSmaller, convertToSmallerUnsigned, convertUnsignedToSigned, isArray, isInteger, isNumeric, isSigned, isString, isStruct, type

Constructors

VarHolder protected

VarHolder();

Creates the VarHolder.

Destructor

~VarHolder virtual

virtual ~VarHolder();

Destroys the VarHolder.

Member Functions

clone virtual inline

virtual VarHolder * clone() const;

Throws NotImplementedException. Implementation should deep-copy the VarHolder.

convert virtual inline

virtual void convert(
    Int8 & val
) const;

Throws BadCastException. Must be overriden in a type specialization in order to suport the conversion.

convert virtual

virtual void convert(
    Int16 & val
) const;

Throws BadCastException. Must be overriden in a type specialization in order to suport the conversion.

convert virtual

virtual void convert(
    Int32 & val
) const;

Throws BadCastException. Must be overriden in a type specialization in order to suport the conversion.

convert virtual

virtual void convert(
    Int64 & val
) const;

Throws BadCastException. Must be overriden in a type specialization in order to suport the conversion.

convert virtual

virtual void convert(
    UInt8 & val
) const;

Throws BadCastException. Must be overriden in a type specialization in order to suport the conversion.

convert virtual

virtual void convert(
    UInt16 & val
) const;

Throws BadCastException. Must be overriden in a type specialization in order to suport the conversion.

convert virtual

virtual void convert(
    UInt32 & val
) const;

Throws BadCastException. Must be overriden in a type specialization in order to suport the conversion.

convert virtual

virtual void convert(
    UInt64 & val
) const;

Throws BadCastException. Must be overriden in a type specialization in order to suport the conversion.

convert virtual

virtual void convert(
    DateTime & val
) const;

Throws BadCastException. Must be overriden in a type specialization in order to suport the conversion.

convert virtual

virtual void convert(
    LocalDateTime & val
) const;

Throws BadCastException. Must be overriden in a type specialization in order to suport the conversion.

convert virtual

virtual void convert(
    Timestamp & val
) const;

Throws BadCastException. Must be overriden in a type specialization in order to suport the conversion.

convert virtual

virtual void convert(
    bool & val
) const;

Throws BadCastException. Must be overriden in a type specialization in order to suport the conversion.

convert virtual

virtual void convert(
    float & val
) const;

Throws BadCastException. Must be overriden in a type specialization in order to suport the conversion.

convert virtual

virtual void convert(
    double & val
) const;

Throws BadCastException. Must be overriden in a type specialization in order to suport the conversion.

convert virtual

virtual void convert(
    char & val
) const;

Throws BadCastException. Must be overriden in a type specialization in order to suport the conversion.

convert virtual

virtual void convert(
    std::string & val
) const;

Throws BadCastException. Must be overriden in a type specialization in order to suport the conversion.

isArray virtual inline

virtual bool isArray() const;

Returns false. Must be properly overriden in a type specialization in order to suport the diagnostic.

isInteger virtual inline

virtual bool isInteger() const;

Returns false. Must be properly overriden in a type specialization in order to suport the diagnostic.

isNumeric virtual inline

virtual bool isNumeric() const;

Returns false. Must be properly overriden in a type specialization in order to suport the diagnostic.

isSigned virtual inline

virtual bool isSigned() const;

Returns false. Must be properly overriden in a type specialization in order to suport the diagnostic.

isString virtual inline

virtual bool isString() const;

Returns false. Must be properly overriden in a type specialization in order to suport the diagnostic.

isStruct virtual inline

virtual bool isStruct() const;

Returns false. Must be properly overriden in a type specialization in order to suport the diagnostic.

type virtual inline

virtual const std::type_info & type() const;

Throws NotImplementedException. Implementation should return the type information for the stored content.

convertSignedFloatToUnsigned protected inline

template < typename F, typename T > void convertSignedFloatToUnsigned(
    const F & from,
    T & to
) const;

This function is meant for converting floating point data types to unsigned integral data types. Negative values can not be converted and if one is encountered, RangeException is thrown. If uper limit is within the target data type limits, the conversion is performed.

convertSignedToUnsigned protected inline

template < typename F, typename T > void convertSignedToUnsigned(
    const F & from,
    T & to
) const;

This function is meant for converting signed integral data types to unsigned data types. Negative values can not be converted and if one is encountered, RangeException is thrown. If upper limit is within the target data type limits, the conversion is performed.

convertToSmaller protected inline

template < typename F, typename T > void convertToSmaller(
    const F & from,
    T & to
) const;

This function is meant to convert signed numeric values from larger to smaller type. It checks the upper and lower bound and if from value is within limits of type T (i.e. check calls do not throw), it is converted.

convertToSmallerUnsigned protected inline

template < typename F, typename T > void convertToSmallerUnsigned(
    const F & from,
    T & to
) const;

This function is meant for converting unsigned integral data types, from larger to smaller type. Since lower limit is always 0 for unigned types, only the upper limit is checked, thus saving some cycles compared to the signed version of the function. If the value to be converted is smaller than the maximum value for the target type, the conversion is performed.

convertUnsignedToSigned protected inline

template < typename F, typename T > void convertUnsignedToSigned(
    const F & from,
    T & to
) const;

This function is meant for converting unsigned integral data types to unsigned data types. Negative values can not be converted and if one is encountered, RangeException is thrown. If upper limit is within the target data type limits, the converiosn is performed.