diff options
author | Kai Koehne <kai.koehne@digia.com> | 2014-02-25 15:44:54 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-13 13:26:36 +0100 |
commit | 19693362e7b345d417554c6497e5117f2b189be5 (patch) | |
tree | 70c43012ba53d23a47e84ff8d1361d7af65adeca /src/corelib/io | |
parent | 2350c7e35c7b21ab86e54e43d1e1bfddb1746922 (diff) |
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>
Diffstat (limited to 'src/corelib/io')
-rw-r--r-- | src/corelib/io/qloggingregistry.cpp | 34 | ||||
-rw-r--r-- | src/corelib/io/qloggingregistry_p.h | 4 |
2 files changed, 23 insertions, 15 deletions
diff --git a/src/corelib/io/qloggingregistry.cpp b/src/corelib/io/qloggingregistry.cpp index ab29c42325..c5405d698c 100644 --- a/src/corelib/io/qloggingregistry.cpp +++ b/src/corelib/io/qloggingregistry.cpp @@ -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); diff --git a/src/corelib/io/qloggingregistry_p.h b/src/corelib/io/qloggingregistry_p.h index 70d728228c..21896bb268 100644 --- a/src/corelib/io/qloggingregistry_p.h +++ b/src/corelib/io/qloggingregistry_p.h @@ -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) |