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