From a65a6f14b54977b59030d7863b391a254150c4ca Mon Sep 17 00:00:00 2001 From: Lynix Date: Thu, 21 Mar 2013 17:32:13 +0100 Subject: [PATCH] Fixed and improved String::IsNumber Former-commit-id: 5b3dbfb349b64d227670cb891e2c7ef43606a56a --- src/Nazara/Core/String.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Nazara/Core/String.cpp b/src/Nazara/Core/String.cpp index 4cb605df9..e868f8e39 100644 --- a/src/Nazara/Core/String.cpp +++ b/src/Nazara/Core/String.cpp @@ -2633,7 +2633,7 @@ bool NzString::IsNumber(nzUInt8 base, nzUInt32 flags) const return false; NzString check = Simplified(); - if (check.m_sharedString->size) + if (check.m_sharedString->size == 0) return false; char* ptr = (check.m_sharedString->string[0] == '-') ? &check.m_sharedString->string[1] : check.m_sharedString->string; @@ -2642,20 +2642,24 @@ bool NzString::IsNumber(nzUInt8 base, nzUInt32 flags) const { if (flags & CaseInsensitive) { + char limitLower = 'a'+base-1; + char limitUpper = 'A'+base-1; + do { char c = *ptr; - if (c != ' ' && (c < '0' || (c > '9' && c < 'A') || (c > 'A'+base-1 && c < 'a') || c > 'a'+base-1)) + if (c != ' ' && (c < '0' || (c > '9' && c < 'A') || (c > limitUpper && c < 'a') || c > limitLower)) return false; } while (*++ptr); } else { + char limit = 'a'+base-1; do { char c = *ptr; - if (c != ' ' && (c < '0' || (c > '9' && c < 'a') || c > 'a'+base-1)) + if (c != ' ' && (c < '0' || (c > '9' && c < 'a') || c > limit)) return false; } while (*++ptr); @@ -2663,10 +2667,12 @@ bool NzString::IsNumber(nzUInt8 base, nzUInt32 flags) const } else { + char limit = '0'+base-1; + do { char c = *ptr; - if (c != ' ' && (c < '0' || c > '0'+base-1)) + if (c != ' ' && (c < '0' || c > limit)) return false; } while (*++ptr);