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 DLList<ShareAttrDirIterator>* iterators); 46 47 void SetRevision(int64 revision); 48 int64 GetRevision() const; 49 50 void SetUpToDate(bool upToDate); 51 bool IsUpToDate() const; 52 53 // These modifying methods are currently used internally only. 54 // Init()/Update() should be sufficient. 55 void ClearAttrDir(); 56 57 status_t AddAttribute(const char* name, 58 const attr_info& info, const void* data); 59 bool RemoveAttribute(const char* name); 60 void RemoveAttribute(Attribute* attribute); 61 62 Attribute* GetAttribute(const char* name) const; 63 Attribute* GetFirstAttribute() const; 64 Attribute* GetNextAttribute(Attribute* attribute) const; 65 66private: 67 status_t _GetAttributes(const AttrDirInfo& dirInfo, 68 Attribute**& attributes, int32& count); 69 70private: 71 SLList<Attribute> fAttributes; 72// TODO: Rethink whether we rather want an array. 73 int64 fRevision; 74 bool fUpToDate; // to enforce reloading even if 75 // a revision is cached 76}; 77 78#endif // NET_FS_SHARE_ATTR_DIR_H 79