- 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:
Aleksandar Fabijanic
2012-09-24 03:51:40 +00:00
parent a6cc973fe3
commit d8397b9153
30 changed files with 3715 additions and 3739 deletions

View File

@@ -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);

View File

@@ -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;
}