1 #pragma once
2 
3 namespace fineftp
4 {
5   enum class Permission : int
6   {
7     FileRead   = (1 << 0),  /**< Download files */
8     FileWrite  = (1 << 1),  /**< Upload files as new files */
9     FileAppend = (1 << 2),  /**< Upload files that get appended to existing files */
10     FileDelete = (1 << 3),  /**< Delete existing files or overwrite an existing file */
11     FileRename = (1 << 4),  /**< Rename existing files */
12 
13     DirList    = (1 << 5),  /**< Retrieve the content of directories */
14     DirCreate  = (1 << 6),  /**< Create new directories */
15     DirDelete  = (1 << 7),  /**< Delete existing directories */
16     DirRename  = (1 << 8),  /**< Rename existing directories */
17 
18     All      = (FileRead | FileWrite | FileAppend | FileDelete | FileRename | DirList | DirCreate | DirDelete | DirRename),
19     ReadOnly = (FileRead | DirList),
20     None     = 0
21   };
22 
23   inline Permission operator~   (Permission a)                { return (Permission)~(int)a; }
24   inline Permission operator|   (Permission a, Permission b)  { return (Permission)((int)a | (int)b); }
25   inline Permission operator&   (Permission a, Permission b)  { return (Permission)((int)a & (int)b); }
26   inline Permission operator^   (Permission a, Permission b)  { return (Permission)((int)a ^ (int)b); }
27   inline Permission& operator|= (Permission& a, Permission b) { return (Permission&)((int&)a |= (int)b); }
28   inline Permission& operator&= (Permission& a, Permission b) { return (Permission&)((int&)a &= (int)b); }
29   inline Permission& operator^= (Permission& a, Permission b) { return (Permission&)((int&)a ^= (int)b); }
30 
31 }