diff options
author | Petr Mrázek <peterix@gmail.com> | 2021-07-25 19:11:59 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2021-07-25 19:50:44 +0200 |
commit | 20b9f2b42a3b58b6081af271774fbcc34025dccb (patch) | |
tree | 064fa59facb3357139b47bd4e60bfc8edb35ca11 /launcher/pathmatcher | |
parent | dd133680858351e3e07690e286882327a4f42ba5 (diff) | |
download | PrismLauncher-20b9f2b42a3b58b6081af271774fbcc34025dccb.tar.gz PrismLauncher-20b9f2b42a3b58b6081af271774fbcc34025dccb.tar.bz2 PrismLauncher-20b9f2b42a3b58b6081af271774fbcc34025dccb.zip |
NOISSUE Flatten gui and logic libraries into MultiMC
Diffstat (limited to 'launcher/pathmatcher')
-rw-r--r-- | launcher/pathmatcher/FSTreeMatcher.h | 21 | ||||
-rw-r--r-- | launcher/pathmatcher/IPathMatcher.h | 12 | ||||
-rw-r--r-- | launcher/pathmatcher/MultiMatcher.h | 31 | ||||
-rw-r--r-- | launcher/pathmatcher/RegexpMatcher.h | 42 |
4 files changed, 106 insertions, 0 deletions
diff --git a/launcher/pathmatcher/FSTreeMatcher.h b/launcher/pathmatcher/FSTreeMatcher.h new file mode 100644 index 00000000..361924af --- /dev/null +++ b/launcher/pathmatcher/FSTreeMatcher.h @@ -0,0 +1,21 @@ +#pragma once + +#include "IPathMatcher.h" +#include <SeparatorPrefixTree.h> +#include <QRegularExpression> + +class FSTreeMatcher : public IPathMatcher +{ +public: + virtual ~FSTreeMatcher() {}; + FSTreeMatcher(SeparatorPrefixTree<'/'> & tree) : m_fsTree(tree) + { + } + + virtual bool matches(const QString &string) const override + { + return m_fsTree.covers(string); + } + + SeparatorPrefixTree<'/'> & m_fsTree; +}; diff --git a/launcher/pathmatcher/IPathMatcher.h b/launcher/pathmatcher/IPathMatcher.h new file mode 100644 index 00000000..b60621c9 --- /dev/null +++ b/launcher/pathmatcher/IPathMatcher.h @@ -0,0 +1,12 @@ +#pragma once +#include <memory> + +class IPathMatcher +{ +public: + typedef std::shared_ptr<IPathMatcher> Ptr; + +public: + virtual ~IPathMatcher(){}; + virtual bool matches(const QString &string) const = 0; +}; diff --git a/launcher/pathmatcher/MultiMatcher.h b/launcher/pathmatcher/MultiMatcher.h new file mode 100644 index 00000000..8bc1b6ee --- /dev/null +++ b/launcher/pathmatcher/MultiMatcher.h @@ -0,0 +1,31 @@ +#include "IPathMatcher.h" +#include <SeparatorPrefixTree.h> +#include <QRegularExpression> + +class MultiMatcher : public IPathMatcher +{ +public: + virtual ~MultiMatcher() {}; + MultiMatcher() + { + } + MultiMatcher &add(Ptr add) + { + m_matchers.append(add); + return *this; + } + + virtual bool matches(const QString &string) const override + { + for(auto iter: m_matchers) + { + if(iter->matches(string)) + { + return true; + } + } + return false; + } + + QList<Ptr> m_matchers; +}; diff --git a/launcher/pathmatcher/RegexpMatcher.h b/launcher/pathmatcher/RegexpMatcher.h new file mode 100644 index 00000000..825d488c --- /dev/null +++ b/launcher/pathmatcher/RegexpMatcher.h @@ -0,0 +1,42 @@ +#include "IPathMatcher.h" +#include <QRegularExpression> + +class RegexpMatcher : public IPathMatcher +{ +public: + virtual ~RegexpMatcher() {}; + RegexpMatcher(const QString ®exp) + { + m_regexp.setPattern(regexp); + m_onlyFilenamePart = !regexp.contains('/'); + } + + RegexpMatcher &caseSensitive(bool cs = true) + { + if(cs) + { + m_regexp.setPatternOptions(QRegularExpression::CaseInsensitiveOption); + } + else + { + m_regexp.setPatternOptions(QRegularExpression::NoPatternOption); + } + return *this; + } + + virtual bool matches(const QString &string) const override + { + if(m_onlyFilenamePart) + { + auto slash = string.lastIndexOf('/'); + if(slash != -1) + { + auto part = string.mid(slash + 1); + return m_regexp.match(part).hasMatch(); + } + } + return m_regexp.match(string).hasMatch(); + } + QRegularExpression m_regexp; + bool m_onlyFilenamePart = false; +}; |