1 // Entry.h 2 3 #ifndef ENTRY_H 4 #define ENTRY_H 5 6 #include <fs_interface.h> 7 #include <SupportDefs.h> 8 9 #include <util/DoublyLinkedList.h> 10 11 #include "String.h" 12 13 class AllocationInfo; 14 class Directory; 15 class EntryIterator; 16 class Node; 17 18 class Entry : public DoublyLinkedListLinkImpl<Entry> { 19 public: 20 Entry(const char *name, Node *node = NULL, Directory *parent = NULL); 21 ~Entry(); 22 23 status_t InitCheck() const; 24 25 inline void SetParent(Directory *parent) { fParent = parent; } 26 Directory *GetParent() const { return fParent; } 27 28 // inline void SetNode(Node *node) { fNode = node; } 29 status_t Link(Node *node); 30 status_t Unlink(); 31 Node *GetNode() const { return fNode; } 32 33 status_t SetName(const char *newName); 34 inline const char *GetName() const { return fName.GetString(); } 35 36 // inline Volume *GetVolume() const { return fVolume; } 37 38 inline DoublyLinkedListLink<Entry> *GetReferrerLink() 39 { return &fReferrerLink; } 40 41 // entry iterator management 42 void AttachEntryIterator(EntryIterator *iterator); 43 void DetachEntryIterator(EntryIterator *iterator); 44 inline DoublyLinkedList<EntryIterator> *GetEntryIteratorList() 45 { return &fIterators; } 46 47 // debugging 48 void GetAllocationInfo(AllocationInfo &info); 49 50 private: 51 Directory *fParent; 52 Node *fNode; 53 String fName; 54 DoublyLinkedListLink<Entry> fReferrerLink; 55 // iterator management 56 DoublyLinkedList<EntryIterator> fIterators; 57 }; 58 59 // GetNodeReferrerLink 60 class GetNodeReferrerLink { 61 private: 62 typedef DoublyLinkedListLink<Entry> Link; 63 64 public: 65 inline Link *operator()(Entry *entry) const 66 { 67 return entry->GetReferrerLink(); 68 } 69 }; 70 71 #endif // ENTRY_H 72