diff options
author | Keith Gardner <kreios4004@gmail.com> | 2013-02-02 13:08:15 -0600 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-02-16 14:51:21 +0100 |
commit | b26c9da89220a26227353d67cfe6c25ec6ddc0ee (patch) | |
tree | 4bdfabec29c440975e821ffbbfbab42eada03f4e /src/corelib/tools/qlocale.cpp | |
parent | 08f8027a0eb75c2dc0e6ad885c65e35008c728b3 (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.cpp | 30 |
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; |