/* * Copyright 2013-2014, Stephan Aßmus <superstippi@gmx.de>. * Copyright 2016-2025, Andrew Lindesay <apl@lindesay.co.nz>. * All rights reserved. Distributed under the terms of the MIT License. * * Note that this file included code earlier from `Model.cpp` and * copyrights have been latterly been carried across in 2024. */ #ifndef PACKAGE_FILTER_H #define PACKAGE_FILTER_H #include <vector> #include <Referenceable.h> #include <String.h> #include "PackageFilterSpecification.h" #include "PackageInfo.h" /*! See the class PackageFilterFactory for static factory methods that will create concrete instances of this abstract superclass. */ class PackageFilter : public BReferenceable { public: virtual ~PackageFilter(); virtual bool AcceptsPackage(const PackageInfoRef& package) const = 0; }; typedef BReference<PackageFilter> PackageFilterRef; class NotFilter : public PackageFilter { public: NotFilter(PackageFilterRef filter); virtual bool AcceptsPackage(const PackageInfoRef& package) const; private: PackageFilterRef fFilter; }; class AndFilter : public PackageFilter { public: void AddFilter(PackageFilterRef filter); virtual bool AcceptsPackage(const PackageInfoRef& package) const; private: std::vector<PackageFilterRef> fFilters; }; class PackageFilterFactory { public: static PackageFilterRef CreateCategoryFilter(const BString& category); static PackageFilterRef CreateSearchTermsFilter(const BString& searchTerms); static PackageFilterRef CreateDepotFilter(const BString& depotName); static PackageFilterRef CreateStateFilter(PackageState state); static PackageFilterRef CreateDesktopFilter(); static PackageFilterRef CreateNativeDesktopFilter(); static PackageFilterRef CreateSourceFilter(); static PackageFilterRef CreateDevelopmentFilter(); static PackageFilterRef CreateFalseFilter(); static PackageFilterRef CreateFilter(const PackageFilterSpecificationRef specification); }; #endif // PACKAGE_FILTER_H