| Home · All Classes · All Namespaces · Modules · Functions · Files

and-filter.h

    00001
    00023 #ifndef _TelepathyQt_and_filter_h_HEADER_GUARD_
    00024 #define _TelepathyQt_and_filter_h_HEADER_GUARD_
    00025
    00026 #ifndef IN_TP_QT_HEADER
    00027 #error IN_TP_QT_HEADER
    00028 #endif
    00029
    00030 #include <TelepathyQt/Filter>
    00031 #include <TelepathyQt/Types>
    00032
    00033 namespace Tp
    00034 {
    00035
    00036 template <class T>
    00037 class AndFilter : public Filter<T>
    00038 {
    00039 public:
    00040     static SharedPtr<AndFilter<T> > create(
    00041             const QList<SharedPtr<const Filter<T> > > &filters = QList<SharedPtr<const Filter<T> > >())
    00042     {
    00043         return SharedPtr<AndFilter<T> >(new AndFilter<T>(filters));
    00044     }
    00045
    00046     inline virtual ~AndFilter() { }
    00047
    00048     inline virtual bool isValid() const
    00049     {
    00050         Q_FOREACH (const SharedPtr<const Filter<T> > &filter, mFilters) {
    00051             if (!filter || !filter->isValid()) {
    00052                 return false;
    00053             }
    00054         }
    00055         return true;
    00056     }
    00057
    00058     inline virtual bool matches(const SharedPtr<T> &t) const
    00059     {
    00060         if (!isValid()) {
    00061             return false;
    00062         }
    00063
    00064         Q_FOREACH (const SharedPtr<const Filter<T> > &filter, mFilters) {
    00065             if (!filter->matches(t)) {
    00066                 return false;
    00067             }
    00068         }
    00069         return true;
    00070     }
    00071
    00072     inline QList<SharedPtr<const Filter<T> > > filters() const { return mFilters; }
    00073
    00074 private:
    00075     AndFilter(const QList<SharedPtr<const Filter<T> > > &filters)
    00076         : Filter<T>(), mFilters(filters) { }
    00077
    00078     QList<SharedPtr<const Filter<T> > > mFilters;
    00079 };
    00080
    00081 } // Tp
    00082
    00083 #endif