1/*
2 * Copyright 2007, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * All rights reserved. Distributed under the terms of the MIT license.
4 */
5#ifndef ENTRY_ITERATOR_H
6#define ENTRY_ITERATOR_H
7
8#include <SupportDefs.h>
9
10#include <util/DoublyLinkedList.h>
11
12class Directory;
13class Entry;
14
15class EntryIterator : public DoublyLinkedListLinkImpl<EntryIterator> {
16public:
17	EntryIterator(Directory *directory = NULL);
18	~EntryIterator();
19
20	status_t SetTo(Directory *directory);
21	void Unset();
22
23	Directory *GetDirectory() const { return fDirectory; }
24
25	status_t Suspend();
26	status_t Resume();
27	bool IsSuspended() const { return fSuspended; }
28
29	status_t GetNext(Entry **entry);
30	Entry *GetCurrent() const { return fEntry; }
31
32	status_t Rewind();
33
34private:
35	void SetCurrent(Entry *entry, bool isNext);
36
37private:
38	friend class Directory;
39
40private:
41	Directory					*fDirectory;
42	Entry						*fEntry;
43	bool						fSuspended;
44	bool						fIsNext;
45	bool						fDone;
46};
47
48#endif	// ENTRY_ITERATOR_H
49