qdatetime: micro optimization in fmtDateTime

The function showed up in the profiler when doing
heavy logging involving timestamps in Qt Creator.

Change-Id: I81c4e22981a5de91df3da6a0f1df2a08552fa71a
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
bb10
hjk 2012-06-27 13:15:07 +02:00 committed by Qt by Nokia
parent b7db596590
commit 702788f4ad
1 changed files with 35 additions and 35 deletions

View File

@ -3817,59 +3817,59 @@ static QString getFmtString(const QString& f, const QTime* dt = 0, const QDate*
// Parses the format string and uses getFmtString to get the values for the tokens. Ret
static QString fmtDateTime(const QString& f, const QTime* dt, const QDate* dd)
{
const QLatin1Char quote('\'');
QString buf;
if (f.isEmpty())
return QString();
return buf;
if (dt && !dt->isValid())
return QString();
return buf;
if (dd && !dd->isValid())
return QString();
return buf;
const bool ap = hasUnquotedAP(f);
QString buf;
QString frm;
QChar status(QLatin1Char('0'));
uint status = '0';
for (int i = 0; i < (int)f.length(); ++i) {
if (f.at(i) == quote) {
if (status == quote) {
if (i > 0 && f.at(i - 1) == quote)
buf += QLatin1Char('\'');
status = QLatin1Char('0');
for (int i = 0, n = f.length(); i < n; ++i) {
const QChar c = f.at(i);
const uint cc = c.unicode();
if (cc == '\'') {
if (status == cc) {
if (i > 0 && f.at(i - 1).unicode() == cc)
buf += c;
status = '0';
} else {
if (!frm.isEmpty()) {
buf += getFmtString(frm, dt, dd, ap);
frm.clear();
}
status = quote;
status = cc;
}
} else if (status == quote) {
buf += f.at(i);
} else if (f.at(i) == status) {
if ((ap) && ((f.at(i) == QLatin1Char('P')) || (f.at(i) == QLatin1Char('p'))))
status = QLatin1Char('0');
frm += f.at(i);
} else if (status == '\'') {
buf += c;
} else if (c == status) {
if (ap && (cc == 'P' || cc == 'p'))
status = '0';
frm += c;
} else {
buf += getFmtString(frm, dt, dd, ap);
frm.clear();
if ((f.at(i) == QLatin1Char('h')) || (f.at(i) == QLatin1Char('m'))
|| (f.at(i) == QLatin1Char('H'))
|| (f.at(i) == QLatin1Char('s')) || (f.at(i) == QLatin1Char('z'))) {
status = f.at(i);
frm += f.at(i);
} else if ((f.at(i) == QLatin1Char('d')) || (f.at(i) == QLatin1Char('M')) || (f.at(i) == QLatin1Char('y'))) {
status = f.at(i);
frm += f.at(i);
} else if ((ap) && (f.at(i) == QLatin1Char('A'))) {
status = QLatin1Char('P');
frm += f.at(i);
} else if((ap) && (f.at(i) == QLatin1Char('a'))) {
status = QLatin1Char('p');
frm += f.at(i);
if (cc == 'h' || cc == 'm' || cc == 'H' || cc == 's' || cc == 'z') {
status = cc;
frm += c;
} else if (cc == 'd' || cc == 'M' || cc == 'y') {
status = cc;
frm += c;
} else if (ap && cc == 'A') {
status = 'P';
frm += c;
} else if (ap && cc == 'a') {
status = 'p';
frm += c;
} else {
buf += f.at(i);
status = QLatin1Char('0');
buf += c;
status = '0';
}
}
}