xref: /haiku/src/add-ons/kernel/file_systems/netfs/client/ShareAttrDir.h (revision 5a1d355fdf2747f80f8c46e2539f844a0b813346)
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