Merge pull request #1882 from Burgch/uint64-dynamic-var

Add support for (unsigned) long long when long is 64bit
This commit is contained in:
Günter Obiltschnig
2017-11-07 15:18:48 +01:00
committed by GitHub
6 changed files with 1211 additions and 22 deletions

View File

@@ -186,6 +186,16 @@ public:
void convert(unsigned long& val) const;
/// Calls convert(UInt32).
#else
virtual void convert(long long& val) const;
/// Throws BadCastException. Must be overriden in a type
/// specialization in order to suport the conversion.
virtual void convert(unsigned long long & val) const;
/// Throws BadCastException. Must be overriden in a type
/// specialization in order to suport the conversion.
#endif
virtual void convert(bool& val) const;
@@ -522,6 +532,19 @@ inline void VarHolder::convert(unsigned long& val) const
val = tmp;
}
#else
inline void VarHolder::convert(long long& /*val*/) const
{
throw BadCastException("Can not convert to long long");
}
inline void VarHolder::convert(unsigned long long& /*val*/) const
{
throw BadCastException("Can not convert to unsigned long long");
}
#endif
inline void VarHolder::convert(bool& /*val*/) const
@@ -753,6 +776,20 @@ public:
convertSignedToUnsigned(_val, val);
}
#ifdef POCO_LONG_IS_64_BIT
void convert(long long& val) const
{
val = _val;
}
void convert(unsigned long long& val) const
{
convertSignedToUnsigned(_val, val);
}
#endif
void convert(bool& val) const
{
val = (_val != 0);
@@ -895,6 +932,20 @@ public:
convertSignedToUnsigned(_val, val);
}
#ifdef POCO_LONG_IS_64_BIT
void convert(long long& val) const
{
val = _val;
}
void convert(unsigned long long& val) const
{
convertSignedToUnsigned(_val, val);
}
#endif
void convert(bool& val) const
{
val = (_val != 0);
@@ -1035,6 +1086,20 @@ public:
convertSignedToUnsigned(_val, val);
}
#ifdef POCO_LONG_IS_64_BIT
void convert(long long& val) const
{
val = _val;
}
void convert(unsigned long long& val) const
{
convertSignedToUnsigned(_val, val);
}
#endif
void convert(bool& val) const
{
val = (_val != 0);
@@ -1173,6 +1238,20 @@ public:
convertSignedToUnsigned(_val, val);
}
#ifdef POCO_LONG_IS_64_BIT
void convert(long long& val) const
{
val = _val;
}
void convert(unsigned long long& val) const
{
convertSignedToUnsigned(_val, val);
}
#endif
void convert(bool& val) const
{
val = (_val != 0);
@@ -1326,6 +1405,20 @@ public:
val = _val;
}
#ifdef POCO_LONG_IS_64_BIT
void convert(long long& val) const
{
val = static_cast<long long>(_val);
}
void convert(unsigned long long& val) const
{
val = _val;
}
#endif
void convert(bool& val) const
{
val = (_val != 0);
@@ -1464,6 +1557,20 @@ public:
val = _val;
}
#ifdef POCO_LONG_IS_64_BIT
void convert(long long& val) const
{
val = static_cast<long long>(_val);
}
void convert(unsigned long long& val) const
{
val = _val;
}
#endif
void convert(bool& val) const
{
val = (_val != 0);
@@ -1602,6 +1709,20 @@ public:
val = _val;
}
#ifdef POCO_LONG_IS_64_BIT
void convert(long long& val) const
{
convertUnsignedToSigned(_val, val);
}
void convert(unsigned long long& val) const
{
val = _val;
}
#endif
void convert(bool& val) const
{
val = (_val != 0);
@@ -1740,6 +1861,20 @@ public:
val = _val;
}
#ifdef POCO_LONG_IS_64_BIT
void convert(long long& val) const
{
convertUnsignedToSigned(_val, val);
}
void convert(unsigned long long& val) const
{
val = _val;
}
#endif
void convert(bool& val) const
{
val = (_val != 0);
@@ -1899,6 +2034,20 @@ public:
val = static_cast<UInt64>(_val ? 1 : 0);
}
#ifdef POCO_LONG_IS_64_BIT
void convert(long long& val) const
{
val = static_cast<long long>(_val ? 1 : 0);
}
void convert(unsigned long long& val) const
{
val = static_cast<unsigned long long>(_val ? 1 : 0);
}
#endif
void convert(bool& val) const
{
val = _val;
@@ -2035,6 +2184,20 @@ public:
convertSignedFloatToUnsigned(_val, val);
}
#ifdef POCO_LONG_IS_64_BIT
void convert(long long& val) const
{
convertToSmaller(_val, val);
}
void convert(unsigned long long& val) const
{
convertSignedFloatToUnsigned(_val, val);
}
#endif
void convert(bool& val) const
{
val = !(_val <= std::numeric_limits<float>::min() &&
@@ -2174,6 +2337,20 @@ public:
convertSignedFloatToUnsigned(_val, val);
}
#ifdef POCO_LONG_IS_64_BIT
void convert(long long& val) const
{
convertToSmaller(_val, val);
}
void convert(unsigned long long& val) const
{
convertSignedFloatToUnsigned(_val, val);
}
#endif
void convert(bool& val) const
{
val = !(_val <= std::numeric_limits<double>::min() &&
@@ -2319,6 +2496,20 @@ public:
val = static_cast<UInt8>(_val);
}
#ifdef POCO_LONG_IS_64_BIT
void convert(long long& val) const
{
val = static_cast<long long>(_val);
}
void convert(unsigned long long& val) const
{
val = static_cast<unsigned long long>(_val);
}
#endif
void convert(bool& val) const
{
val = (_val != '\0');
@@ -2463,6 +2654,20 @@ public:
val = NumberParser::parseUnsigned64(_val);
}
#ifdef POCO_LONG_IS_64_BIT
void convert(long long& val) const
{
val = NumberParser::parse64(_val);
}
void convert(unsigned long long& val) const
{
val = NumberParser::parseUnsigned64(_val);
}
#endif
void convert(bool& val) const
{
if (_val.empty())
@@ -2641,6 +2846,20 @@ public:
val = NumberParser::parseUnsigned64(toStdString());
}
#ifdef POCO_LONG_IS_64_BIT
void convert(long long& val) const
{
val = NumberParser::parse64(toStdString());
}
void convert(unsigned long long& val) const
{
val = NumberParser::parseUnsigned64(toStdString());
}
#endif
void convert(bool& val) const
{
static const std::string VAL_FALSE("false");
@@ -3043,6 +3262,305 @@ private:
};
#else // if defined (POCO_LONG_IS_64_BIT)
template <>
class VarHolderImpl<long long>: public VarHolder
{
public:
VarHolderImpl(long long val): _val(val)
{
}
~VarHolderImpl()
{
}
const std::type_info& type() const
{
return typeid(long long);
}
void convert(Int8& val) const
{
convertToSmaller(_val, val);
}
void convert(Int16& val) const
{
convertToSmaller(_val, val);
}
void convert(Int32& val) const
{
convertToSmaller(_val, val);
}
void convert(Int64& val) const
{
val = static_cast<Int64>(_val);
}
void convert(UInt8& val) const
{
convertSignedToUnsigned(_val, val);
}
void convert(UInt16& val) const
{
convertSignedToUnsigned(_val, val);
}
void convert(UInt32& val) const
{
convertSignedToUnsigned(_val, val);
}
void convert(UInt64& val) const
{
convertSignedToUnsigned(_val, val);
}
void convert(long long& val) const
{
val = _val;
}
void convert(unsigned long long& val) const
{
convertSignedToUnsigned(_val, val);
}
void convert(bool& val) const
{
val = (_val != 0);
}
void convert(float& val) const
{
val = static_cast<float>(_val);
}
void convert(double& val) const
{
val = static_cast<double>(_val);
}
void convert(char& val) const
{
UInt8 tmp;
convert(tmp);
val = static_cast<char>(tmp);
}
void convert(std::string& val) const
{
val = NumberFormatter::format(_val);
}
VarHolder* clone(Placeholder<VarHolder>* pVarHolder = 0) const
{
return cloneHolder(pVarHolder, _val);
}
const long long& value() const
{
return _val;
}
bool isArray() const
{
return false;
}
bool isStruct() const
{
return false;
}
bool isInteger() const
{
return std::numeric_limits<long long>::is_integer;
}
bool isSigned() const
{
return std::numeric_limits<long long>::is_signed;
}
bool isNumeric() const
{
return std::numeric_limits<long long>::is_specialized;
}
bool isBoolean() const
{
return false;
}
bool isString() const
{
return false;
}
private:
VarHolderImpl();
VarHolderImpl(const VarHolderImpl&);
VarHolderImpl& operator = (const VarHolderImpl&);
long long _val;
};
template <>
class VarHolderImpl<unsigned long long>: public VarHolder
{
public:
VarHolderImpl(unsigned long long val): _val(val)
{
}
~VarHolderImpl()
{
}
const std::type_info& type() const
{
return typeid(unsigned long long);
}
void convert(Int8& val) const
{
convertUnsignedToSigned(_val, val);
}
void convert(Int16& val) const
{
convertUnsignedToSigned(_val, val);
}
void convert(Int32& val) const
{
convertUnsignedToSigned(_val, val);
}
void convert(Int64& val) const
{
convertUnsignedToSigned(_val, val);
}
void convert(UInt8& val) const
{
convertToSmallerUnsigned(_val, val);
}
void convert(UInt16& val) const
{
convertToSmallerUnsigned(_val, val);
}
void convert(UInt32& val) const
{
convertToSmallerUnsigned(_val, val);
}
void convert(UInt64& val) const
{
val = static_cast<UInt64>(_val);
}
void convert(long long& val) const
{
convertUnsignedToSigned(_val, val);
}
void convert(unsigned long long& val) const
{
val = _val;
}
void convert(bool& val) const
{
val = (_val != 0);
}
void convert(float& val) const
{
val = static_cast<float>(_val);
}
void convert(double& val) const
{
val = static_cast<double>(_val);
}
void convert(char& val) const
{
UInt8 tmp;
convert(tmp);
val = static_cast<char>(tmp);
}
void convert(std::string& val) const
{
val = NumberFormatter::format(_val);
}
VarHolder* clone(Placeholder<VarHolder>* pVarHolder = 0) const
{
return cloneHolder(pVarHolder, _val);
}
const unsigned long long& value() const
{
return _val;
}
bool isArray() const
{
return false;
}
bool isStruct() const
{
return false;
}
bool isInteger() const
{
return std::numeric_limits<unsigned long long>::is_integer;
}
bool isSigned() const
{
return std::numeric_limits<unsigned long long>::is_signed;
}
bool isNumeric() const
{
return std::numeric_limits<unsigned long long>::is_specialized;
}
bool isBoolean() const
{
return false;
}
bool isString() const
{
return false;
}
private:
VarHolderImpl();
VarHolderImpl(const VarHolderImpl&);
VarHolderImpl& operator = (const VarHolderImpl&);
unsigned long long _val;
};
#endif // 64bit
@@ -3293,6 +3811,20 @@ public:
val = _val.timestamp().epochMicroseconds();
}
#ifdef POCO_LONG_IS_64_BIT
void convert(long long& val) const
{
val = _val.timestamp().epochMicroseconds();
}
void convert(unsigned long long& val) const
{
val = _val.timestamp().epochMicroseconds();
}
#endif
void convert(std::string& val) const
{
val = DateTimeFormatter::format(_val, Poco::DateTimeFormat::ISO8601_FORMAT);
@@ -3409,6 +3941,20 @@ public:
val = _val.timestamp().epochMicroseconds();
}
#ifdef POCO_LONG_IS_64_BIT
void convert(long long& val) const
{
val = _val.timestamp().epochMicroseconds();
}
void convert(unsigned long long& val) const
{
val = _val.timestamp().epochMicroseconds();
}
#endif
void convert(std::string& val) const
{
val = DateTimeFormatter::format(_val, Poco::DateTimeFormat::ISO8601_FORMAT);
@@ -3525,6 +4071,20 @@ public:
val = _val.epochMicroseconds();
}
#ifdef POCO_LONG_IS_64_BIT
void convert(long long& val) const
{
val = _val.epochMicroseconds();
}
void convert(unsigned long long& val) const
{
val = _val.epochMicroseconds();
}
#endif
void convert(std::string& val) const
{
val = DateTimeFormatter::format(_val, Poco::DateTimeFormat::ISO8601_FORMAT);