00001 #ifndef DEBTAGS_BASIC_PACKAGE_FILTER_H
00002 #define DEBTAGS_BASIC_PACKAGE_FILTER_H
00003
00004 #pragma interface
00005
00006 #include <string>
00007 #include <tagcoll/Tag.h>
00008 #include <tagcoll/TagSet.h>
00009 #include <debtags/Consumer.h>
00010
00011 namespace Debtags
00012 {
00013
00014 using namespace Tagcoll;
00015
00016 class Package;
00017 class Regexp;
00018
00019 class BasicPackageMatcher : public PackageMatcher
00020 {
00021 public:
00022 typedef enum { YES, NO, ANY } InstalledStatus;
00023 protected:
00024 std::string maint;
00025 Regexp* name;
00026 Regexp* str;
00027 InstalledStatus installed;
00028 TagSet tags;
00029
00030 public:
00031 BasicPackageMatcher() throw ()
00032 : name(0), str(0), installed(ANY) {}
00033 virtual ~BasicPackageMatcher() throw ();
00034
00035 void setName(const std::string _name) throw ();
00036 void setMaintainer(const std::string _maint) throw () { maint = _maint; }
00037 void setString(const std::string _str) throw ();
00038 void setInstalled(InstalledStatus val) throw ()
00039 {
00040 installed = val;
00041 }
00042 void setDebtags(const TagSet& ptags) throw ()
00043 {
00044 tags = ptags;
00045 }
00046
00047 bool hasName() const throw () { return name != 0; }
00048 bool hasMaintainer() const throw () { return !maint.empty(); }
00049 bool hasString() const throw () { return str != 0; }
00050 bool hasInstalled() const throw () { return installed != ANY; }
00051 bool hasDebtags() const throw () { return !tags.empty(); }
00052
00053
00054 bool hasOnlyName() const throw () { return name != 0 && str == 0 && maint.empty() && installed == ANY && tags.empty(); }
00055 bool hasOnlyMaintainer() const throw () { return name == 0 && str == 0 && !maint.empty() && installed == ANY && tags.empty(); }
00056 bool isMaintainerSignificant() const throw () { return maint.size() > 1; }
00057 bool hasOnlyDebtags() const throw () { return name == 0 && str == 0 && maint.empty() && installed == ANY && !tags.empty(); }
00058 bool hasNonDebtags() const throw () { return name != 0 || str != 0 || !maint.empty() || installed != ANY; }
00059
00060 bool matchName(const std::string& text) const throw ();
00061 bool matchMaintainer(const std::string& text) const throw ();
00062 bool matchString(const std::string& text) const throw ();
00063 bool matchInstalled(int status) const throw ();
00064 bool matchDebtags(const TagSet& ptags) const throw ();
00065 const TagSet& debtagsTagset() const throw () { return tags; }
00066
00067 bool match(const Package& pkg) const throw ();
00068 };
00069
00070 };
00071
00072
00073 #endif