NzString::Clear now takes an optional argument
Fixed NzString::ToDouble rejecting legal strings NzString::Clear can now keep the internal buffer to improve performances NzStringToNumber now takes an optional argument to check if the conversion went well Optimized NzString::ToInteger
This commit is contained in:
parent
d97e4a7f43
commit
7ed9e16664
|
|
@ -46,7 +46,7 @@ class NAZARA_API NzString : public NzHashable
|
|||
NzString& Append(const char* string);
|
||||
NzString& Append(const NzString& string);
|
||||
|
||||
void Clear();
|
||||
void Clear(bool keepBuffer = false);
|
||||
|
||||
bool Contains(char character, int start = 0, nzUInt32 flags = None) const;
|
||||
bool Contains(const char* string, int start = 0, nzUInt32 flags = None) const;
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ template<typename T> bool NzNumberEquals(T a, T b);
|
|||
inline NzString NzNumberToString(long long number, nzUInt8 radix = 10);
|
||||
template<typename T> T NzRadians(T radians);
|
||||
template<typename T> T NzRadianToDegree(T radians);
|
||||
inline long long NzStringToNumber(NzString str, nzUInt8 radix = 10);
|
||||
inline long long NzStringToNumber(NzString str, nzUInt8 radix = 10, bool* ok = nullptr);
|
||||
|
||||
#include <Nazara/Math/Basic.inl>
|
||||
|
||||
|
|
|
|||
|
|
@ -195,7 +195,7 @@ NzString NzNumberToString(long long number, nzUInt8 radix)
|
|||
if (number == 0)
|
||||
return '0';
|
||||
|
||||
static const char* symbols("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
|
||||
static const char* symbols = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
|
||||
bool negative;
|
||||
if (number < 0)
|
||||
|
|
@ -238,12 +238,16 @@ T NzRadianToDegree(T radians)
|
|||
return radians * (180.0/M_PI);
|
||||
}
|
||||
|
||||
long long NzStringToNumber(NzString str, nzUInt8 radix)
|
||||
long long NzStringToNumber(NzString str, nzUInt8 radix, bool* ok)
|
||||
{
|
||||
#if NAZARA_MATH_SAFE
|
||||
if (radix < 2 || radix > 36)
|
||||
{
|
||||
NazaraError("Radix must be between 2 and 36");
|
||||
|
||||
if (ok)
|
||||
*ok = false;
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
|
@ -269,11 +273,18 @@ long long NzStringToNumber(NzString str, nzUInt8 radix)
|
|||
else
|
||||
{
|
||||
NazaraError("str is not a valid number");
|
||||
|
||||
if (ok)
|
||||
*ok = false;
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
while (*++digit);
|
||||
|
||||
if (ok)
|
||||
*ok = true;
|
||||
|
||||
return (negative) ? -static_cast<long long>(total) : total;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ inline unsigned int nzPow2(unsigned int n)
|
|||
{
|
||||
unsigned int x = 1;
|
||||
|
||||
// Tant que x est plus petit que n, on décale ses bits vers la gauche, ce qui revient à multiplier par deux
|
||||
while(x <= n)
|
||||
x <<= 1;
|
||||
|
||||
|
|
@ -265,9 +266,17 @@ NzString& NzString::Append(const NzString& string)
|
|||
return *this;
|
||||
}
|
||||
|
||||
void NzString::Clear()
|
||||
void NzString::Clear(bool keepBuffer)
|
||||
{
|
||||
ReleaseString();
|
||||
if (keepBuffer)
|
||||
{
|
||||
ReleaseString();
|
||||
|
||||
m_sharedString->size = 0;
|
||||
m_sharedString->string = nullptr;
|
||||
}
|
||||
else
|
||||
ReleaseString();
|
||||
}
|
||||
|
||||
bool NzString::Contains(char character, int start, nzUInt32 flags) const
|
||||
|
|
@ -3842,7 +3851,7 @@ bool NzString::ToBool(bool* value, nzUInt32 flags) const
|
|||
|
||||
bool NzString::ToDouble(double* value) const
|
||||
{
|
||||
if (m_sharedString->size)
|
||||
if (m_sharedString->size == 0)
|
||||
return false;
|
||||
|
||||
if (value)
|
||||
|
|
@ -3853,13 +3862,15 @@ bool NzString::ToDouble(double* value) const
|
|||
|
||||
bool NzString::ToInteger(long long* value, nzUInt8 base) const
|
||||
{
|
||||
if (!IsNumber(base))
|
||||
return false;
|
||||
|
||||
if (value)
|
||||
*value = NzStringToNumber(*this, base);
|
||||
{
|
||||
bool ok;
|
||||
*value = NzStringToNumber(*this, base, &ok);
|
||||
|
||||
return true;
|
||||
return ok;
|
||||
}
|
||||
else
|
||||
return IsNumber(base);
|
||||
}
|
||||
|
||||
NzString NzString::ToLower(nzUInt32 flags) const
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@ bool NzGLSLShader::Compile()
|
|||
glGetProgramiv(m_program, GL_INFO_LOG_LENGTH, &length);
|
||||
if (length > 1)
|
||||
{
|
||||
m_log.Clear(true);
|
||||
m_log.Reserve(length+19-1); // La taille retournée est celle du buffer (Avec caractère de fin)
|
||||
m_log.Prepend("Linkage error: ");
|
||||
m_log.Resize(length+19-1); // Extension du buffer d'écriture pour ajouter le log
|
||||
|
|
@ -129,7 +130,7 @@ bool NzGLSLShader::Create()
|
|||
glBindAttribLocation(m_program, attribIndex[nzElementUsage_Diffuse], "Diffuse");
|
||||
glBindAttribLocation(m_program, attribIndex[nzElementUsage_Tangent], "Tangent");
|
||||
|
||||
NzString uniformName = "TexCoordi";
|
||||
NzString uniformName = "TexCoord*";
|
||||
for (unsigned int i = 0; i < 8; ++i)
|
||||
{
|
||||
uniformName[8] = '0'+i;
|
||||
|
|
@ -242,6 +243,7 @@ bool NzGLSLShader::Load(nzShaderType type, const NzString& source)
|
|||
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length);
|
||||
if (length > 1)
|
||||
{
|
||||
m_log.Clear(true);
|
||||
m_log.Reserve(length+19-1); // La taille retournée est celle du buffer (Avec caractère de fin)
|
||||
m_log.Prepend("Compilation error: ");
|
||||
m_log.Resize(length+19-1); // Extension du buffer d'écriture pour ajouter le log
|
||||
|
|
|
|||
Loading…
Reference in New Issue