1/*
2 * Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef QUERY_H
6#define QUERY_H
7
8
9#include <SupportDefs.h>
10
11#include <util/DoublyLinkedList.h>
12
13
14struct dirent;
15
16namespace QueryParser {
17	template<typename QueryPolicy> class Query;
18};
19
20class Node;
21class Volume;
22
23
24class Query : public DoublyLinkedListLinkImpl<Query> {
25public:
26							~Query();
27
28	static	status_t		Create(Volume* volume, const char* queryString,
29								uint32 flags, port_id port, uint32 token,
30								Query*& _query);
31
32			status_t		Rewind();
33			status_t		GetNextEntry(struct dirent* entry, size_t size);
34
35			void			LiveUpdate(Node* node,
36								const char* attribute, int32 type,
37								const void* oldKey, size_t oldLength,
38								const void* newKey, size_t newLength);
39
40private:
41			struct QueryPolicy;
42			friend struct QueryPolicy;
43			typedef QueryParser::Query<QueryPolicy> QueryImpl;
44
45private:
46							Query(Volume* volume);
47
48			status_t		_Init(const char* queryString, uint32 flags,
49								port_id port, uint32 token);
50
51private:
52			Volume*			fVolume;
53			QueryImpl*		fImpl;
54};
55
56
57typedef DoublyLinkedList<Query> QueryList;
58
59
60#endif	// QUERY_H
61