mirror of
https://github.com/pocoproject/poco.git
synced 2025-10-28 11:31:53 +01:00
- VS2012: build/tests
- JSON: style and exceptions catch by ref fix - NumberParser: case-insensitive hex parsing - Dynamic::Var: const std::string& cast operator specialization (coaxing std::string ctor) - LocalDateTime: strftime fix (buffer too small for full tz string, use %Z instead of %z - makes no difference on windows but is more portable) - small buildwin.cmd vsvars32.bat call fix
This commit is contained in:
@@ -156,6 +156,8 @@ public:
|
||||
if (!_pHolder)
|
||||
throw InvalidAccessException("Can not convert empty value.");
|
||||
|
||||
if (typeid(T) == _pHolder->type()) return extract<T>();
|
||||
|
||||
T result;
|
||||
_pHolder->convert(result);
|
||||
return result;
|
||||
@@ -188,6 +190,11 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
operator const std::string & ();
|
||||
/// Specialization of the cast operator for const std::string reference.
|
||||
/// The main reason for this specialization is to help compilers
|
||||
/// with construction/assignment of Var to std::string.
|
||||
|
||||
template <typename T>
|
||||
const T& extract() const
|
||||
/// Returns a const reference to the actual value.
|
||||
@@ -210,8 +217,6 @@ public:
|
||||
typeid(T).name()));
|
||||
}
|
||||
|
||||
|
||||
|
||||
template <typename T>
|
||||
Var& operator = (const T& other)
|
||||
/// Assignment operator for assigning POD to Var
|
||||
@@ -558,6 +563,7 @@ private:
|
||||
///
|
||||
/// Var members
|
||||
///
|
||||
|
||||
inline void Var::swap(Var& ptr)
|
||||
{
|
||||
std::swap(_pHolder, ptr._pHolder);
|
||||
|
||||
@@ -263,7 +263,7 @@ private:
|
||||
T n = 0;
|
||||
for (; it != end; ++it)
|
||||
{
|
||||
if ((*it >= '0' && *it <= '9') || (*it >= 'A' && *it <= 'F'))
|
||||
if ((*it >= '0' && *it <= '9') || (*it >= 'A' && *it <= 'F') || (*it >= 'a' && *it <= 'f'))
|
||||
{
|
||||
if (n > (std::numeric_limits<T>::max() / base))
|
||||
return false;
|
||||
@@ -272,6 +272,8 @@ private:
|
||||
n = n * base + *it - '0';
|
||||
else if (*it >= 'A' && *it <= 'F')
|
||||
n = n * base + *it - 'A' + 10;
|
||||
else if (*it >= 'a' && *it <= 'f')
|
||||
n = n * base + *it - 'a' + 10;
|
||||
}
|
||||
else break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user