1// ShareAttrDir.h 2 3#ifndef NET_FS_SHARE_ATTR_DIR_H 4#define NET_FS_SHARE_ATTR_DIR_H 5 6#include <fs_attr.h> 7 8#include "ShareAttrDirIterator.h" 9#include "SLList.h" 10 11class AttrDirInfo; 12class AttributeInfo; 13class BNode; 14 15// Attribute 16class Attribute : public SLListLinkImpl<Attribute> { 17 Attribute(const char* name, 18 const attr_info& info, const void* data); 19 ~Attribute(); 20public: 21 static status_t CreateAttribute(const char* name, 22 const attr_info& info, const void* data, 23 Attribute** attribute); 24 static void DeleteAttribute(Attribute* attribute); 25 26 const char* GetName() const; 27 void GetInfo(attr_info* info) const; 28 uint32 GetType() const; 29 off_t GetSize() const; 30 const void* GetData() const; 31 32private: 33 attr_info fInfo; 34 char fDataAndName[1]; 35}; 36 37// ShareAttrDir 38class ShareAttrDir { 39public: 40 ShareAttrDir(); 41 ~ShareAttrDir(); 42 43 status_t Init(const AttrDirInfo& dirInfo); 44 status_t Update(const AttrDirInfo& dirInfo, 45 DoublyLinkedList<ShareAttrDirIterator>* 46 iterators); 47 48 void SetRevision(int64 revision); 49 int64 GetRevision() const; 50 51 void SetUpToDate(bool upToDate); 52 bool IsUpToDate() const; 53 54 // These modifying methods are currently used internally only. 55 // Init()/Update() should be sufficient. 56 void ClearAttrDir(); 57 58 status_t AddAttribute(const char* name, 59 const attr_info& info, const void* data); 60 bool RemoveAttribute(const char* name); 61 void RemoveAttribute(Attribute* attribute); 62 63 Attribute* GetAttribute(const char* name) const; 64 Attribute* GetFirstAttribute() const; 65 Attribute* GetNextAttribute(Attribute* attribute) const; 66 67private: 68 status_t _GetAttributes(const AttrDirInfo& dirInfo, 69 Attribute**& attributes, int32& count); 70 71private: 72 SLList<Attribute> fAttributes; 73// TODO: Rethink whether we rather want an array. 74 int64 fRevision; 75 bool fUpToDate; // to enforce reloading even if 76 // a revision is cached 77}; 78 79#endif // NET_FS_SHARE_ATTR_DIR_H 80