diff options
Diffstat (limited to 'src/corelib/mimetypes/qmimeglobpattern_p.h')
-rw-r--r-- | src/corelib/mimetypes/qmimeglobpattern_p.h | 75 |
1 files changed, 22 insertions, 53 deletions
diff --git a/src/corelib/mimetypes/qmimeglobpattern_p.h b/src/corelib/mimetypes/qmimeglobpattern_p.h index 584e3329a6..b4316355ba 100644 --- a/src/corelib/mimetypes/qmimeglobpattern_p.h +++ b/src/corelib/mimetypes/qmimeglobpattern_p.h @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef QMIMEGLOBPATTERN_P_H #define QMIMEGLOBPATTERN_P_H @@ -58,17 +22,20 @@ QT_REQUIRE_CONFIG(mimetype); #include <QtCore/qstringlist.h> #include <QtCore/qhash.h> +#include <algorithm> + QT_BEGIN_NAMESPACE struct QMimeGlobMatchResult { - void addMatch(const QString &mimeType, int weight, const QString &pattern, int knownSuffixLength = 0); + void addMatch(const QString &mimeType, int weight, const QString &pattern, + qsizetype knownSuffixLength = 0); QStringList m_matchingMimeTypes; // only those with highest weight QStringList m_allMatchingMimeTypes; int m_weight = 0; - int m_matchingPatternLength = 0; - int m_knownSuffixLength = 0; + qsizetype m_matchingPatternLength = 0; + qsizetype m_knownSuffixLength = 0; }; class QMimeGlobPattern @@ -112,7 +79,7 @@ private: AnimPattern, // special handling for "*.anim[1-9j]" pattern OtherPattern }; - PatternType detectPatternType(const QString &pattern) const; + PatternType detectPatternType(QStringView pattern) const; QString m_pattern; QString m_mimeType; @@ -122,31 +89,32 @@ private: }; Q_DECLARE_SHARED(QMimeGlobPattern) +using AddMatchFilterFunc = std::function<bool(const QString &)>; + class QMimeGlobPatternList : public QList<QMimeGlobPattern> { public: - bool hasPattern(const QString &mimeType, const QString &pattern) const + bool hasPattern(QStringView mimeType, QStringView pattern) const { - const_iterator it = begin(); - const const_iterator myend = end(); - for (; it != myend; ++it) - if ((*it).pattern() == pattern && (*it).mimeType() == mimeType) - return true; - return false; + auto matchesMimeAndPattern = [mimeType, pattern](const QMimeGlobPattern &e) { + return e.pattern() == pattern && e.mimeType() == mimeType; + }; + return std::any_of(begin(), end(), matchesMimeAndPattern); } /*! "noglobs" is very rare occurrence, so it's ok if it's slow */ - void removeMimeType(const QString &mimeType) + void removeMimeType(QStringView mimeType) { - auto isMimeTypeEqual = [&mimeType](const QMimeGlobPattern &pattern) { + auto isMimeTypeEqual = [mimeType](const QMimeGlobPattern &pattern) { return pattern.mimeType() == mimeType; }; removeIf(isMimeTypeEqual); } - void match(QMimeGlobMatchResult &result, const QString &fileName) const; + void match(QMimeGlobMatchResult &result, const QString &fileName, + const AddMatchFilterFunc &filterFunc) const; }; /*! @@ -163,7 +131,8 @@ public: void addGlob(const QMimeGlobPattern &glob); void removeMimeType(const QString &mimeType); - void matchingGlobs(const QString &fileName, QMimeGlobMatchResult &result) const; + void matchingGlobs(const QString &fileName, QMimeGlobMatchResult &result, + const AddMatchFilterFunc &filterFunc) const; void clear(); PatternsMap m_fastPatterns; // example: "doc" -> "application/msword", "text/plain" |