1// Permissions.h
2
3#ifndef NET_FS_PERMISSIONS_H
4#define NET_FS_PERMISSIONS_H
5
6#include <SupportDefs.h>
7
8enum {
9	// file permissions
10	READ_PERMISSION					= 0x01,
11	WRITE_PERMISSION				= 0x02,
12
13	// directory permissions
14	READ_DIR_PERMISSION				= 0x04,
15	WRITE_DIR_PERMISSION			= 0x08,
16	RESOLVE_DIR_ENTRY_PERMISSION	= 0x10,
17
18	// share permissions
19	MOUNT_SHARE_PERMISSION			= 0x20,
20	QUERY_SHARE_PERMISSION			= 0x40,
21
22	// all permissions
23	ALL_PERMISSIONS					= 0x7f,
24};
25
26class Permissions {
27public:
28	inline						Permissions();
29	inline						Permissions(uint32 permissions);
30	inline						Permissions(const Permissions& other);
31
32	inline	uint32				GetPermissions() const;
33
34	inline	Permissions&		AddPermissions(uint32 permissions);
35	inline	Permissions&		AddPermissions(Permissions permissions);
36
37	inline	bool				Implies(uint32 permissions) const;
38
39	inline	bool				ImpliesReadPermission() const;
40	inline	bool				ImpliesWritePermission() const;
41	inline	bool				ImpliesReadDirPermission() const;
42	inline	bool				ImpliesWriteDirPermission() const;
43	inline	bool				ImpliesResolveDirEntryPermission() const;
44	inline	bool				ImpliesMountSharePermission() const;
45	inline	bool				ImpliesQuerySharePermission() const;
46
47	inline	Permissions&		operator=(const Permissions& other);
48	inline	bool				operator==(const Permissions& other) const;
49	inline	bool				operator!=(const Permissions& other) const;
50
51private:
52			uint32				fPermissions;
53};
54
55// inline implementation
56
57// constructor
58inline
59Permissions::Permissions()
60	: fPermissions(0)
61{
62}
63
64// constructor
65inline
66Permissions::Permissions(uint32 permissions)
67	: fPermissions(permissions)
68{
69}
70
71// copy constructor
72inline
73Permissions::Permissions(const Permissions& other)
74	: fPermissions(other.fPermissions)
75{
76}
77
78// GetPermissions
79inline
80uint32
81Permissions::GetPermissions() const
82{
83	return fPermissions;
84}
85
86// AddPermissions
87inline
88Permissions&
89Permissions::AddPermissions(uint32 permissions)
90{
91	fPermissions |= permissions;
92	return *this;
93}
94
95// AddPermissions
96inline
97Permissions&
98Permissions::AddPermissions(Permissions permissions)
99{
100	fPermissions |= permissions.fPermissions;
101	return *this;
102}
103
104// Implies
105inline
106bool
107Permissions::Implies(uint32 permissions) const
108{
109	return ((fPermissions & permissions) == permissions);
110}
111
112// ImpliesReadPermission
113inline
114bool
115Permissions::ImpliesReadPermission() const
116{
117	return Implies(READ_PERMISSION);
118}
119
120// ImpliesWritePermission
121inline
122bool
123Permissions::ImpliesWritePermission() const
124{
125	return Implies(WRITE_PERMISSION);
126}
127
128// ImpliesReadDirPermission
129inline
130bool
131Permissions::ImpliesReadDirPermission() const
132{
133	return Implies(READ_DIR_PERMISSION);
134}
135
136// ImpliesWriteDirPermission
137inline
138bool
139Permissions::ImpliesWriteDirPermission() const
140{
141	return Implies(WRITE_DIR_PERMISSION);
142}
143
144// ImpliesResolveDirEntryPermission
145inline
146bool
147Permissions::ImpliesResolveDirEntryPermission() const
148{
149	return Implies(RESOLVE_DIR_ENTRY_PERMISSION);
150}
151
152// ImpliesMountSharePermission
153inline
154bool
155Permissions::ImpliesMountSharePermission() const
156{
157	return Implies(MOUNT_SHARE_PERMISSION);
158}
159
160// ImpliesQuerySharePermission
161inline
162bool
163Permissions::ImpliesQuerySharePermission() const
164{
165	return Implies(QUERY_SHARE_PERMISSION);
166}
167
168// =
169inline
170Permissions&
171Permissions::operator=(const Permissions& other)
172{
173	fPermissions = other.fPermissions;
174	return *this;
175}
176
177// ==
178inline
179bool
180Permissions::operator==(const Permissions& other) const
181{
182	return (fPermissions == other.fPermissions);
183}
184
185// !=
186inline
187bool
188Permissions::operator!=(const Permissions& other) const
189{
190	return (fPermissions != other.fPermissions);
191}
192
193#endif	// NET_FS_PERMISSIONS_H
194