00001 #ifndef BANKSELECTION_H 00002 #define BANKSELECTION_H 00003 00004 #include "definitions.h" 00005 00025 class BankSelection 00026 { 00027 public: 00028 typedef IDs::source SourceID; 00029 typedef std::vector<SourceID> SourceList_t; 00030 00034 BankSelection(bool match_all = true); 00035 00037 BankSelection(const SourceID& sid); 00038 00040 BankSelection(const SourceList_t& list); 00041 00043 virtual ~BankSelection(); 00044 00047 inline bool Includes(const SourceID& sid) const 00048 {return HasWildCardMatch(sid) || HasExactMatch(sid);} 00049 00052 inline bool HasWildCardMatch(const SourceID& sid) const 00053 {return ListMatch(sid, fWildCards);} 00054 00057 inline bool HasExactMatch(const SourceID& sid) const 00058 {return ListMatch(sid, fMatches);} 00059 00062 BankSelection& MatchAll(); 00063 00066 BankSelection& MatchNone(); 00067 00071 BankSelection& MatchOnly(const SourceList_t& list); 00072 00076 BankSelection& MatchOnly(const SourceID& sid); 00077 00078 // /// Only match Sources that are also on the provided list of Source IDs 00079 // /// Logical: SELF = SELF & LIST 00080 // /// @return *this 00081 // BankSelection& Intersect(SourceList_t list); 00082 00091 BankSelection& Add(const SourceList_t& list); 00092 00100 BankSelection& Add(const SourceID& sid); 00101 00106 BankSelection& Compact(); 00107 00115 BankSelection& Remove(const SourceList_t& list); 00116 00126 BankSelection& Remove(const SourceList_t& list, SourceList_t& removed); 00127 00128 00132 BankSelection& Remove(const SourceID& sid); 00133 00134 protected: 00135 typedef SourceList_t::iterator iter; 00136 typedef SourceList_t::const_iterator citer; 00137 00138 struct iter_pair { iter wildcard; iter match; }; 00139 00142 bool ListMatch(const SourceID& sid, const SourceList_t& list) const; 00143 00145 void SortUnique(SourceList_t& list); 00146 00150 iter_pair ImpRemove(const SourceList_t& list); 00151 00152 private: 00153 00155 SourceList_t fWildCards; 00156 00158 SourceList_t fMatches; 00159 00160 }; 00161 00162 #endif //BANKSELECTION_H 00163 00164 00165 // emacs metadata 00166 // Local Variables: 00167 // mode: c++ 00168 // End: