#ifndef NET_FS_SHARE_ATTR_DIR_H
#define NET_FS_SHARE_ATTR_DIR_H
#include <fs_attr.h>
#include "ShareAttrDirIterator.h"
#include "SLList.h"
class AttrDirInfo;
class AttributeInfo;
class BNode;
class Attribute : public SLListLinkImpl<Attribute> {
Attribute(const char* name,
const attr_info& info, const void* data);
~Attribute();
public:
static status_t CreateAttribute(const char* name,
const attr_info& info, const void* data,
Attribute** attribute);
static void DeleteAttribute(Attribute* attribute);
const char* GetName() const;
void GetInfo(attr_info* info) const;
uint32 GetType() const;
off_t GetSize() const;
const void* GetData() const;
private:
attr_info fInfo;
char fDataAndName[1];
};
class ShareAttrDir {
public:
ShareAttrDir();
~ShareAttrDir();
status_t Init(const AttrDirInfo& dirInfo);
status_t Update(const AttrDirInfo& dirInfo,
DoublyLinkedList<ShareAttrDirIterator>*
iterators);
void SetRevision(int64 revision);
int64 GetRevision() const;
void SetUpToDate(bool upToDate);
bool IsUpToDate() const;
void ClearAttrDir();
status_t AddAttribute(const char* name,
const attr_info& info, const void* data);
bool RemoveAttribute(const char* name);
void RemoveAttribute(Attribute* attribute);
Attribute* GetAttribute(const char* name) const;
Attribute* GetFirstAttribute() const;
Attribute* GetNextAttribute(Attribute* attribute) const;
private:
status_t _GetAttributes(const AttrDirInfo& dirInfo,
Attribute**& attributes, int32& count);
private:
SLList<Attribute> fAttributes;
int64 fRevision;
bool fUpToDate;
};
#endif