QLocalePrivate: add overloaded codeToScript() and codeToLanguage()

... for QStringRef and QChar array.

Now we can use QStringRef arg or QChar array arg to avoid
unnecessary allocations.

Also mark these functions as Q_DECL_NOTHROW.

Change-Id: Ibe75346d80cc413e303fad886ecb82dbdb89af24
Reviewed-by: Edward Welbourne <edward.welbourne@theqtcompany.com>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
This commit is contained in:
Anton Kudryavtsev 2016-03-31 13:54:30 +03:00
parent 80d1e732d8
commit 3200653546
2 changed files with 12 additions and 10 deletions

View File

@ -91,9 +91,8 @@ QT_BEGIN_INCLUDE_NAMESPACE
#include "qlocale_data_p.h"
QT_END_INCLUDE_NAMESPACE
QLocale::Language QLocalePrivate::codeToLanguage(const QString &code)
QLocale::Language QLocalePrivate::codeToLanguage(const QChar *code, int len) Q_DECL_NOTHROW
{
int len = code.length();
if (len != 2 && len != 3)
return QLocale::C;
ushort uc1 = code[0].toLower().unicode();
@ -134,17 +133,16 @@ QLocale::Language QLocalePrivate::codeToLanguage(const QString &code)
return QLocale::C;
}
QLocale::Script QLocalePrivate::codeToScript(const QString &code)
QLocale::Script QLocalePrivate::codeToScript(const QChar *code, int len) Q_DECL_NOTHROW
{
int len = code.length();
if (len != 4)
return QLocale::AnyScript;
// script is titlecased in our data
unsigned char c0 = code.at(0).toUpper().toLatin1();
unsigned char c1 = code.at(1).toLower().toLatin1();
unsigned char c2 = code.at(2).toLower().toLatin1();
unsigned char c3 = code.at(3).toLower().toLatin1();
unsigned char c0 = code[0].toUpper().toLatin1();
unsigned char c1 = code[1].toLower().toLatin1();
unsigned char c2 = code[2].toLower().toLatin1();
unsigned char c3 = code[3].toLower().toLatin1();
const unsigned char *c = script_code_list;
for (int i = 0; i < QLocale::LastScript; ++i, c += 4) {

View File

@ -353,8 +353,12 @@ public:
static QString languageToCode(QLocale::Language language);
static QString scriptToCode(QLocale::Script script);
static QString countryToCode(QLocale::Country country);
static QLocale::Language codeToLanguage(const QString &code);
static QLocale::Script codeToScript(const QString &code);
static QLocale::Language codeToLanguage(const QChar *code, int len) Q_DECL_NOTHROW;
static QLocale::Language codeToLanguage(const QString &code) Q_DECL_NOTHROW { return codeToLanguage(code.data(), code.size()); }
static QLocale::Language codeToLanguage(const QStringRef &code) Q_DECL_NOTHROW { return codeToLanguage(code.data(), code.size()); }
static QLocale::Script codeToScript(const QChar *code, int len) Q_DECL_NOTHROW;
static QLocale::Script codeToScript(const QString &code) Q_DECL_NOTHROW { return codeToScript(code.data(), code.size()); }
static QLocale::Script codeToScript(const QStringRef &code) Q_DECL_NOTHROW { return codeToScript(code.data(), code.size()); }
static QLocale::Country codeToCountry(const QChar *code, int len) Q_DECL_NOTHROW;
static QLocale::Country codeToCountry(const QString &code) Q_DECL_NOTHROW { return codeToCountry(code.data(), code.size()); }
static QLocale::Country codeToCountry(const QStringRef &code) Q_DECL_NOTHROW { return codeToCountry(code.data(), code.size()); }