46 lines
1013 B
C++
46 lines
1013 B
C++
#ifndef __FILTEREDQUERY_H
|
|
#define __FILTEREDQUERY_H
|
|
|
|
#include <Query.h>
|
|
|
|
#include "ObjectList.h"
|
|
|
|
typedef bool (*filter_function)(const entry_ref *ref, void *arg);
|
|
|
|
struct filter_pair {
|
|
filter_function filter;
|
|
void *args;
|
|
|
|
filter_pair(filter_function function, void *arguments)
|
|
{
|
|
filter = function;
|
|
args = arguments;
|
|
}
|
|
};
|
|
|
|
|
|
class TFilteredQuery : public BQuery {
|
|
public:
|
|
TFilteredQuery();
|
|
|
|
// BQuery doesn't have a copy constructor. We supply
|
|
// this method to workaround this problem
|
|
TFilteredQuery(const BQuery &query);
|
|
TFilteredQuery(const TFilteredQuery &query);
|
|
virtual ~TFilteredQuery();
|
|
|
|
bool AddFilter(filter_function function, void *arg);
|
|
void RemoveFilter(filter_function function);
|
|
|
|
virtual status_t GetNextRef(entry_ref *ref);
|
|
virtual status_t GetNextEntry(BEntry *entry, bool traverse = false);
|
|
virtual int32 GetNextDirents(dirent *buf, size_t length, int32 count = INT_MAX);
|
|
|
|
status_t Clear();
|
|
|
|
private:
|
|
BObjectList<filter_pair> fFilters;
|
|
};
|
|
|
|
#endif //__FILTEREDQUERY_H
|