summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qlocale.cpp
diff options
context:
space:
mode:
authorKeith Gardner <kreios4004@gmail.com>2013-02-02 13:08:15 -0600
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-02-16 14:51:21 +0100
commitb26c9da89220a26227353d67cfe6c25ec6ddc0ee (patch)
tree4bdfabec29c440975e821ffbbfbab42eada03f4e /src/corelib/tools/qlocale.cpp
parent08f8027a0eb75c2dc0e6ad885c65e35008c728b3 (diff)
QLocalePrivate: Generalized numberToCLocale.
Modified QLocalPrivate::numberToCLocale to take a const QChar * and an integer instead of a QString. This allows for passing QStrings and QStringRefs into the same function. Updated the QLocalePrivate::stringToDouble, QLocalePrivate::stringToLongLong, and QLocalePrivate::stringToUnsLongLong to use this new function signature. Change-Id: Ifee5dfcd9b743e1d3b9123a65007c89e8ed93e83 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/corelib/tools/qlocale.cpp')
-rw-r--r--src/corelib/tools/qlocale.cpp30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp
index 39257158a4..6c35f45cdb 100644
--- a/src/corelib/tools/qlocale.cpp
+++ b/src/corelib/tools/qlocale.cpp
@@ -2892,12 +2892,12 @@ QString QLocalePrivate::unsLongLongToString(const QChar zero, const QChar group,
number. We can't detect junk here, since we don't even know the base
of the number.
*/
-bool QLocalePrivate::numberToCLocale(const QString &num,
+bool QLocalePrivate::numberToCLocale(const QChar *str, int len,
GroupSeparatorMode group_sep_mode,
CharBuff *result) const
{
- const QChar *uc = num.unicode();
- int l = num.length();
+ const QChar *uc = str;
+ int l = len;
int idx = 0;
// Skip whitespace
@@ -3043,7 +3043,13 @@ double QLocalePrivate::stringToDouble(const QString &number, bool *ok,
GroupSeparatorMode group_sep_mode) const
{
CharBuff buff;
- if (!numberToCLocale(group().unicode() == 0xa0 ? number.trimmed() : number,
+ // Do not use the ternary operator - triggers msvc2012 bug in optimized builds
+ QString trimmedNumber;
+ if (group().unicode() == 0xa0)
+ trimmedNumber = number.trimmed();
+ else
+ trimmedNumber = number;
+ if (!numberToCLocale(trimmedNumber.unicode(), trimmedNumber.size(),
group_sep_mode, &buff)) {
if (ok != 0)
*ok = false;
@@ -3056,7 +3062,13 @@ qlonglong QLocalePrivate::stringToLongLong(const QString &number, int base,
bool *ok, GroupSeparatorMode group_sep_mode) const
{
CharBuff buff;
- if (!numberToCLocale(group().unicode() == 0xa0 ? number.trimmed() : number,
+ // Do not use the ternary operator - triggers msvc2012 bug in optimized builds
+ QString trimmedNumber;
+ if (group().unicode() == 0xa0)
+ trimmedNumber = number.trimmed();
+ else
+ trimmedNumber = number;
+ if (!numberToCLocale(trimmedNumber.unicode(), trimmedNumber.size(),
group_sep_mode, &buff)) {
if (ok != 0)
*ok = false;
@@ -3070,7 +3082,13 @@ qulonglong QLocalePrivate::stringToUnsLongLong(const QString &number, int base,
bool *ok, GroupSeparatorMode group_sep_mode) const
{
CharBuff buff;
- if (!numberToCLocale(group().unicode() == 0xa0 ? number.trimmed() : number,
+ // Do not use the ternary operator - triggers msvc2012 bug in optimized builds
+ QString trimmedNumber;
+ if (group().unicode() == 0xa0)
+ trimmedNumber = number.trimmed();
+ else
+ trimmedNumber = number;
+ if (!numberToCLocale(trimmedNumber.unicode(), trimmedNumber.size(),
group_sep_mode, &buff)) {
if (ok != 0)
*ok = false;