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