Refactor Filter

Signed-off-by: TheKodeToad <TheKodeToad@proton.me>
This commit is contained in:
TheKodeToad
2025-08-04 14:02:54 +01:00
parent 79b7e277f1
commit d41db5253e
12 changed files with 50 additions and 111 deletions

View File

@@ -3,59 +3,36 @@
#include <QRegularExpression>
#include <QString>
class Filter {
public:
virtual ~Filter() = default;
virtual bool accepts(const QString& value) = 0;
};
using Filter = std::function<bool(const QString&)>;
class ContainsFilter : public Filter {
public:
ContainsFilter(const QString& pattern);
virtual ~ContainsFilter() = default;
bool accepts(const QString& value) override;
namespace Filters {
inline Filter inverse(Filter filter)
{
return [filter = std::move(filter)](const QString& src) { return !filter(src); };
}
private:
QString pattern;
};
inline Filter contains(QString pattern)
{
return [pattern = std::move(pattern)](const QString& src) { return src.contains(pattern); };
}
class ExactFilter : public Filter {
public:
ExactFilter(const QString& pattern);
virtual ~ExactFilter() = default;
bool accepts(const QString& value) override;
inline Filter equals(QString pattern)
{
return [pattern = std::move(pattern)](const QString& src) { return src == pattern; };
}
private:
QString pattern;
};
inline Filter equalsAny(QStringList patterns = {})
{
return [patterns = std::move(patterns)](const QString& src) { return patterns.isEmpty() || patterns.contains(src); };
}
class ExactIfPresentFilter : public Filter {
public:
ExactIfPresentFilter(const QString& pattern);
virtual ~ExactIfPresentFilter() override = default;
bool accepts(const QString& value) override;
inline Filter equalsOrEmpty(QString pattern)
{
return [pattern = std::move(pattern)](const QString& src) { return src.isEmpty() || src == pattern; };
}
private:
QString pattern;
};
class RegexpFilter : public Filter {
public:
RegexpFilter(const QString& regexp, bool invert);
virtual ~RegexpFilter() = default;
bool accepts(const QString& value) override;
private:
QRegularExpression pattern;
bool invert = false;
};
class ExactListFilter : public Filter {
public:
ExactListFilter(const QStringList& pattern = {});
virtual ~ExactListFilter() = default;
bool accepts(const QString& value) override;
private:
QStringList m_pattern;
};
inline Filter regexp(QRegularExpression pattern)
{
return [pattern = std::move(pattern)](const QString& src) { return pattern.match(src).hasMatch(); };
}
} // namespace Filters