1327Sjkh// Directory.h 2228990Suqs 3327Sjkh#ifndef DIRECTORY_H 4327Sjkh#define DIRECTORY_H 5327Sjkh 6327Sjkh#include <util/DoublyLinkedList.h> 7327Sjkh 8327Sjkh#include "Node.h" 9327Sjkh 10327Sjkh 11327Sjkhclass Entry; 12327Sjkhclass File; 13327Sjkhclass SymLink; 14327Sjkh 15327Sjkhclass Directory : public Node { 16327Sjkhpublic: 17327Sjkh Directory(Volume *volume); 18327Sjkh virtual ~Directory(); 19327Sjkh 20327Sjkh virtual status_t Link(Entry *entry); 2193520Sobrien virtual status_t Unlink(Entry *entry); 2293520Sobrien 2393520Sobrien virtual status_t SetSize(off_t newSize); 2474699Ssobomax virtual off_t GetSize() const; 2530221Scharnier 2669793Sobrien Directory *GetParent() const; 27327Sjkh 28327Sjkh status_t CreateDirectory(const char *name, Directory **directory); 29327Sjkh status_t CreateFile(const char *name, File **file); 3084745Ssobomax status_t CreateSymLink(const char *name, const char *path, 31327Sjkh SymLink **symLink); 32327Sjkh 3384745Ssobomax bool IsEmpty() const { return fEntries.IsEmpty(); } 34327Sjkh 35327Sjkh status_t AddEntry(Entry *entry); 36327Sjkh status_t CreateEntry(Node *node, const char *name, Entry **entry = NULL); 37327Sjkh status_t RemoveEntry(Entry *entry); 38327Sjkh status_t DeleteEntry(Entry *entry); 39327Sjkh 40327Sjkh status_t FindEntry(const char *name, Entry **entry) const; 41327Sjkh status_t FindNode(const char *name, Node **node) const; 42327Sjkh status_t FindAndGetNode(const char *name, Node **node, 43327Sjkh Entry **entry = NULL) const; 44327Sjkh 45327Sjkh status_t GetPreviousEntry(Entry **entry) const; 46327Sjkh status_t GetNextEntry(Entry **entry) const; 47327Sjkh 48327Sjkh // debugging 49327Sjkh virtual void GetAllocationInfo(AllocationInfo &info); 50327Sjkh 51327Sjkhprivate: 5269793Sobrien status_t _CreateCommon(Node *node, const char *name); 5330387Sjkh 5430387Sjkhprivate: 5569793Sobrien DoublyLinkedList<Entry> fEntries; 5630387Sjkh}; 571338Sjkh 58327Sjkh#endif // DIRECTORY_H 59327Sjkh