15a1d355fSStephan Aßmus// Entry.h
25a1d355fSStephan Aßmus
35a1d355fSStephan Aßmus#ifndef NET_FS_ENTRY_H
45a1d355fSStephan Aßmus#define NET_FS_ENTRY_H
55a1d355fSStephan Aßmus
65a1d355fSStephan Aßmus#include <HashString.h>
75a1d355fSStephan Aßmus#include <util/DoublyLinkedList.h>
85a1d355fSStephan Aßmus
95a1d355fSStephan Aßmus#include "EntryRef.h"
105a1d355fSStephan Aßmus
115a1d355fSStephan Aßmusclass Directory;
125a1d355fSStephan Aßmusclass Node;
135a1d355fSStephan Aßmusclass Path;
145a1d355fSStephan Aßmusclass Volume;
155a1d355fSStephan Aßmus
165a1d355fSStephan Aßmus// Entry
175a1d355fSStephan Aßmusclass Entry : public DoublyLinkedListLinkImpl<Entry> {
185a1d355fSStephan Aßmuspublic:
195a1d355fSStephan Aßmus								Entry(Volume* volume, Directory* directory,
205a1d355fSStephan Aßmus									const char* name, Node* node);
215a1d355fSStephan Aßmus								~Entry();
225a1d355fSStephan Aßmus
235a1d355fSStephan Aßmus			status_t			InitCheck() const;
245a1d355fSStephan Aßmus
255a1d355fSStephan Aßmus			Volume*				GetVolume() const;
265a1d355fSStephan Aßmus			Directory*			GetDirectory() const;
275a1d355fSStephan Aßmus			NoAllocEntryRef		GetEntryRef() const;
285a1d355fSStephan Aßmus			dev_t				GetVolumeID() const;
295a1d355fSStephan Aßmus			ino_t				GetDirectoryID() const;
305a1d355fSStephan Aßmus			const char*			GetName() const;
315a1d355fSStephan Aßmus			Node*				GetNode() const;
325a1d355fSStephan Aßmus
335a1d355fSStephan Aßmus			status_t			GetPath(Path* path);
345a1d355fSStephan Aßmus
355a1d355fSStephan Aßmus			bool				Exists() const;
365a1d355fSStephan Aßmus
375a1d355fSStephan Aßmus			bool				IsActualEntry() const;
385a1d355fSStephan Aßmus
395a1d355fSStephan Aßmusprivate:
405a1d355fSStephan Aßmus			struct GetDirEntryLink;
415a1d355fSStephan Aßmus			friend struct GetDirEntryLink;
425a1d355fSStephan Aßmus			friend class Directory;
435a1d355fSStephan Aßmus
445a1d355fSStephan Aßmus			Volume*				fVolume;
455a1d355fSStephan Aßmus			Directory*			fDirectory;
465a1d355fSStephan Aßmus			HashString			fName;
475a1d355fSStephan Aßmus			Node*				fNode;
485a1d355fSStephan Aßmus			DoublyLinkedListLink<Entry> fDirEntryLink;
495a1d355fSStephan Aßmus};
505a1d355fSStephan Aßmus
515a1d355fSStephan Aßmus// GetDirEntryLink
525a1d355fSStephan Aßmusstruct Entry::GetDirEntryLink {
535a1d355fSStephan Aßmus	DoublyLinkedListLink<Entry>* operator()(Entry* entry) const
545a1d355fSStephan Aßmus	{
555a1d355fSStephan Aßmus		return &entry->fDirEntryLink;
565a1d355fSStephan Aßmus	}
575a1d355fSStephan Aßmus
585a1d355fSStephan Aßmus	const DoublyLinkedListLink<Entry>* operator()(const Entry* entry) const
595a1d355fSStephan Aßmus	{
605a1d355fSStephan Aßmus		return &entry->fDirEntryLink;
615a1d355fSStephan Aßmus	}
625a1d355fSStephan Aßmus};
635a1d355fSStephan Aßmus
645a1d355fSStephan Aßmus#endif	// NET_FS_ENTRY_H
65