1#ifndef __FILTEREDQUERY_H
2#define __FILTEREDQUERY_H
3
4#include <Query.h>
5
6#include "ObjectList.h"
7
8typedef bool (*filter_function)(const entry_ref *ref, void *arg);
9
10struct filter_pair {
11	filter_function filter;
12	void *args;
13
14	filter_pair(filter_function function, void *arguments)
15	{
16		filter = function;
17		args = arguments;
18	}
19};
20
21
22class TFilteredQuery : public BQuery {
23public:
24	TFilteredQuery();
25
26	// BQuery doesn't have a copy constructor. We supply
27	// this method to workaround this problem
28	TFilteredQuery(const BQuery &query);
29	TFilteredQuery(const TFilteredQuery &query);
30	virtual ~TFilteredQuery();
31
32	bool AddFilter(filter_function function, void *arg);
33	void RemoveFilter(filter_function function);
34
35	virtual status_t GetNextRef(entry_ref *ref);
36	virtual status_t GetNextEntry(BEntry *entry, bool traverse = false);
37	virtual int32 GetNextDirents(dirent *buf, size_t length, int32 count = INT_MAX);
38
39	status_t Clear();
40
41private:
42	BObjectList<filter_pair> fFilters;
43};
44
45#endif //__FILTEREDQUERY_H
46