Use QStringRef for parsing of logging rules
Use QStringRef to speed up the parsing of the left side of logging rules. Change-Id: Idd4d75496e3865d092f2802c45928a414c14c615 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>bb10
parent
2350c7e35c
commit
19693362e7
|
|
@ -64,7 +64,7 @@ QLoggingRule::QLoggingRule() :
|
|||
\internal
|
||||
Constructs a logging rule.
|
||||
*/
|
||||
QLoggingRule::QLoggingRule(const QString &pattern, bool enabled) :
|
||||
QLoggingRule::QLoggingRule(const QStringRef &pattern, bool enabled) :
|
||||
messageType(-1),
|
||||
flags(Invalid),
|
||||
enabled(enabled)
|
||||
|
|
@ -119,36 +119,44 @@ int QLoggingRule::pass(const QString &cat, QtMsgType msgType) const
|
|||
*.io.warning RightFilter, QtWarningMsg
|
||||
*.core.* MidFilter
|
||||
*/
|
||||
void QLoggingRule::parse(const QString &pattern)
|
||||
void QLoggingRule::parse(const QStringRef &pattern)
|
||||
{
|
||||
category = pattern;
|
||||
QStringRef p;
|
||||
|
||||
// strip trailing ".messagetype"
|
||||
if (pattern.endsWith(QLatin1String(".debug"))) {
|
||||
category.chop(strlen(".debug"));
|
||||
p = QStringRef(pattern.string(), pattern.position(),
|
||||
pattern.length() - strlen(".debug"));
|
||||
messageType = QtDebugMsg;
|
||||
} else if (pattern.endsWith(QLatin1String(".warning"))) {
|
||||
category.chop(strlen(".warning"));
|
||||
p = QStringRef(pattern.string(), pattern.position(),
|
||||
pattern.length() - strlen(".warning"));
|
||||
messageType = QtWarningMsg;
|
||||
} else if (pattern.endsWith(QLatin1String(".critical"))) {
|
||||
category.chop(strlen(".critical"));
|
||||
p = QStringRef(pattern.string(), pattern.position(),
|
||||
pattern.length() - strlen(".critical"));
|
||||
messageType = QtCriticalMsg;
|
||||
} else {
|
||||
p = pattern;
|
||||
}
|
||||
|
||||
flags = Invalid;
|
||||
if (!category.contains(QLatin1Char('*'))) {
|
||||
if (!p.contains(QLatin1Char('*'))) {
|
||||
flags = FullText;
|
||||
} else {
|
||||
if (category.endsWith(QLatin1Char('*'))) {
|
||||
if (p.endsWith(QLatin1Char('*'))) {
|
||||
flags |= LeftFilter;
|
||||
category.chop(1);
|
||||
p = QStringRef(p.string(), p.position(), p.length() - 1);
|
||||
}
|
||||
if (category.startsWith(QLatin1Char('*'))) {
|
||||
if (p.startsWith(QLatin1Char('*'))) {
|
||||
flags |= RightFilter;
|
||||
category.remove(0, 1);
|
||||
p = QStringRef(p.string(), p.position() + 1, p.length() - 1);
|
||||
}
|
||||
if (category.contains(QLatin1Char('*'))) // '*' only supported at start/end
|
||||
if (p.contains(QLatin1Char('*'))) // '*' only supported at start/end
|
||||
flags = Invalid;
|
||||
}
|
||||
|
||||
category = p.toString();
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
@ -205,7 +213,7 @@ void QLoggingSettingsParser::setContent(QTextStream &stream)
|
|||
int equalPos = line.indexOf(QLatin1Char('='));
|
||||
if ((equalPos != -1)
|
||||
&& (line.lastIndexOf(QLatin1Char('=')) == equalPos)) {
|
||||
const QString pattern = line.left(equalPos);
|
||||
const QStringRef pattern = line.leftRef(equalPos);
|
||||
const QStringRef value = line.midRef(equalPos + 1);
|
||||
bool enabled = (value.compare(QLatin1String("true"),
|
||||
Qt::CaseInsensitive) == 0);
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ class Q_AUTOTEST_EXPORT QLoggingRule
|
|||
{
|
||||
public:
|
||||
QLoggingRule();
|
||||
QLoggingRule(const QString &pattern, bool enabled);
|
||||
QLoggingRule(const QStringRef &pattern, bool enabled);
|
||||
int pass(const QString &categoryName, QtMsgType type) const;
|
||||
|
||||
enum PatternFlag {
|
||||
|
|
@ -86,7 +86,7 @@ public:
|
|||
bool enabled;
|
||||
|
||||
private:
|
||||
void parse(const QString &pattern);
|
||||
void parse(const QStringRef &pattern);
|
||||
};
|
||||
|
||||
Q_DECLARE_OPERATORS_FOR_FLAGS(QLoggingRule::PatternFlags)
|
||||
|
|
|
|||
|
|
@ -169,7 +169,7 @@ private slots:
|
|||
QFETCH(QtMsgType, msgType);
|
||||
QFETCH(LoggingRuleState, result);
|
||||
|
||||
QLoggingRule rule(pattern, true);
|
||||
QLoggingRule rule(QStringRef(&pattern), true);
|
||||
LoggingRuleState state = Invalid;
|
||||
if (rule.flags != QLoggingRule::Invalid) {
|
||||
switch (rule.pass(category, msgType)) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue