1
0

Fixed Integer pasing warnings in CraftingRecipies.cpp

This commit is contained in:
Tycho
2014-08-13 13:03:56 +01:00
parent c3c3d3a72d
commit 781e1e6264
2 changed files with 64 additions and 4 deletions

View File

@@ -99,6 +99,68 @@ extern int GetBEInt(const char * a_Mem);
/// Writes four bytes to the specified memory location so that they interpret as BigEndian int
extern void SetBEInt(char * a_Mem, Int32 a_Value);
/// Parses any integer type. Checks bounds and
template<class T>
bool StringToInteger(AString a_str, T& a_Num)
{
size_t i = 0;
T positive = true;
T result = 0;
if (a_str[0] == '+')
{
i++;
}
else if (a_str[0] == '-')
{
i++;
positive = false;
}
if (positive)
{
for(; i <= a_str.size(); i++)
{
if ((a_str[i] <= '0') || (a_str[i] >= '9'))
{
return false;
}
if (std::numeric_limits<T>::max() / 10 < result)
{
return false;
}
result *= 10;
T digit = a_str[i] - '0';
if (std::numeric_limits<T>::max() - digit < result)
{
return false;
}
result += digit;
}
}
else
{
for(; i <= a_str.size(); i++)
{
if ((a_str[i] <= '0') || (a_str[i] >= '9'))
{
return false;
}
if (std::numeric_limits<T>::min() / 10 > result)
{
return false;
}
result *= 10;
T digit = a_str[i] - '0';
if (std::numeric_limits<T>::min() + digit > result)
{
return false;
}
result -= digit;
}
}
a_Num = result;
return true;
}
// If you have any other string helper functions, declare them here