MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
file_constants.hpp
1#ifndef MSTL_CORE_FILE_FILE_CONSTANTS_HPP__
2#define MSTL_CORE_FILE_FILE_CONSTANTS_HPP__
4#ifdef MSTL_PLATFORM_WINDOWS__
5#include <Windows.h>
6#include "MSTL/core/config/undef_cmacro.hpp"
7#endif
8#ifdef MSTL_PLATFORM_LINUX__
9#include <fcntl.h>
10#endif
12
13class file;
14
15
16MSTL_INLINE17 constexpr auto FILE_SPLITER =
17#ifdef MSTL_PLATFORM_WINDOWS__
18 "\\/";
19#elif defined(MSTL_PLATFORM_LINUX__)
20 "/";
21#endif
22
23MSTL_INLINE17 constexpr char PREFERRED_SEPARATOR =
24#ifdef MSTL_PLATFORM_WINDOWS__
25 '\\';
26#elif defined(MSTL_PLATFORM_LINUX__)
27 '/';
28#endif
29
30
31#ifdef MSTL_PLATFORM_WINDOWS__
32using fud_t = ::DWORD;
33#elif defined(MSTL_PLATFORM_LINUX__)
34using fud_t = int;
35#endif
36
37enum class FILE_ACCESS : fud_t {
38#ifdef MSTL_PLATFORM_WINDOWS__
39 READ = GENERIC_READ,
40 WRITE = GENERIC_WRITE,
41 READ_WRITE = GENERIC_READ | GENERIC_WRITE,
42 APPEND = FILE_APPEND_DATA | GENERIC_WRITE
43#elif defined(MSTL_PLATFORM_LINUX__)
44 READ = O_RDONLY,
45 WRITE = O_WRONLY,
46 READ_WRITE = O_RDWR,
47 APPEND = O_WRONLY | O_APPEND
48#endif
49};
50
51constexpr FILE_ACCESS operator |(FILE_ACCESS a, FILE_ACCESS b) {
52 return static_cast<FILE_ACCESS>(static_cast<fud_t>(a) | static_cast<fud_t>(b));
53}
54constexpr FILE_ACCESS operator &(FILE_ACCESS a, FILE_ACCESS b) {
55 return static_cast<FILE_ACCESS>(static_cast<fud_t>(a) & static_cast<fud_t>(b));
56}
57
58
59enum class FILE_SHARED : fud_t {
60#ifdef MSTL_PLATFORM_WINDOWS__
61 SHARE_READ = FILE_SHARE_READ,
62 SHARE_WRITE = FILE_SHARE_WRITE,
63 SHARE_READ_WRITE = FILE_SHARE_READ | FILE_SHARE_WRITE,
64 SHARE_DELETE = FILE_SHARE_DELETE,
65 SHARE_ALL = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
66 NO_SHARE = 0
67#elif defined(MSTL_PLATFORM_LINUX__)
68 SHARE_READ = 1,
69 SHARE_WRITE = 2,
70 SHARE_READ_WRITE = 3,
71 SHARE_DELETE = 4,
72 SHARE_ALL = 7,
73 NO_SHARE = 0
74#endif
75};
76
77constexpr FILE_SHARED operator |(FILE_SHARED a, FILE_SHARED b) {
78 return static_cast<FILE_SHARED>(static_cast<fud_t>(a) | static_cast<fud_t>(b));
79}
80constexpr FILE_SHARED operator &(FILE_SHARED a, FILE_SHARED b) {
81 return static_cast<FILE_SHARED>(static_cast<fud_t>(a) & static_cast<fud_t>(b));
82}
83
84
85enum class FILE_CREATION : fud_t {
86#ifdef MSTL_PLATFORM_WINDOWS__
87 CREATE_FORCE = CREATE_ALWAYS,
88 CREATE_NO_EXIST = CREATE_NEW,
89 OPEN_FORCE = OPEN_ALWAYS,
90 OPEN_EXIST = OPEN_EXISTING,
91 TRUNCATE_EXIST = TRUNCATE_EXISTING
92#elif defined(MSTL_PLATFORM_LINUX__)
93 CREATE_FORCE = O_CREAT | O_TRUNC,
94 CREATE_NO_EXIST = O_CREAT | O_EXCL,
95 OPEN_FORCE = O_CREAT,
96 OPEN_EXIST = 0,
97 TRUNCATE_EXIST = O_TRUNC
98#endif
99};
100
101constexpr FILE_CREATION operator |(FILE_CREATION a, FILE_CREATION b) {
102 return static_cast<FILE_CREATION>(static_cast<fud_t>(a) | static_cast<fud_t>(b));
103}
104constexpr FILE_CREATION operator &(FILE_CREATION a, FILE_CREATION b) {
105 return static_cast<FILE_CREATION>(static_cast<fud_t>(a) & static_cast<fud_t>(b));
106}
107
108
109enum class FILE_ATTRI : fud_t {
110#ifdef MSTL_PLATFORM_WINDOWS__
111 NORMAL = FILE_ATTRIBUTE_NORMAL,
112 READONLY = FILE_ATTRIBUTE_READONLY,
113 HIDDEN = FILE_ATTRIBUTE_HIDDEN,
114 SYSTEM = FILE_ATTRIBUTE_SYSTEM,
115 DIRECTORY = FILE_ATTRIBUTE_DIRECTORY,
116 ARCHIVE = FILE_ATTRIBUTE_ARCHIVE,
117 DEVICE = FILE_ATTRIBUTE_DEVICE,
118 TEMPORARY = FILE_ATTRIBUTE_TEMPORARY,
119 REPARSE_POINT = FILE_ATTRIBUTE_REPARSE_POINT,
120 COMPRESSED = FILE_ATTRIBUTE_COMPRESSED,
121 OFFLINE = FILE_ATTRIBUTE_OFFLINE,
122 ENCRYPTED = FILE_ATTRIBUTE_ENCRYPTED,
123 VIRTUAL = FILE_ATTRIBUTE_VIRTUAL,
124 OVERLAPPED = FILE_FLAG_OVERLAPPED,
125 NO_BUFFERING = FILE_FLAG_NO_BUFFERING,
126 WRITE_THROUGH = FILE_FLAG_WRITE_THROUGH,
127 OTHERS = 0
128#elif defined(MSTL_PLATFORM_LINUX__)
129 NORMAL = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH,
130 READONLY = S_IRUSR | S_IRGRP | S_IROTH,
131 DIRECTORY = S_IFDIR,
132 DEVICE = S_IFBLK | S_IFCHR,
133 REPARSE_POINT = S_IFLNK,
134 OVERLAPPED = 0,
135 NO_BUFFERING = O_DIRECT,
136 WRITE_THROUGH = O_SYNC,
137 OTHERS = 0
138#endif
139};
140
141constexpr FILE_ATTRI operator |(FILE_ATTRI a, FILE_ATTRI b) {
142 return static_cast<FILE_ATTRI>(static_cast<fud_t>(a) | static_cast<fud_t>(b));
143}
144constexpr FILE_ATTRI operator &(FILE_ATTRI a, FILE_ATTRI b) {
145 return static_cast<FILE_ATTRI>(static_cast<fud_t>(a) & static_cast<fud_t>(b));
146}
147
148
149enum class FILE_POINTER : fud_t {
150#ifdef MSTL_PLATFORM_WINDOWS__
151 BEGIN = FILE_BEGIN,
152 CURRENT = FILE_CURRENT,
153 END = FILE_END
154#elif defined(MSTL_PLATFORM_LINUX__)
155 BEGIN = SEEK_SET,
156 CURRENT = SEEK_CUR,
157 END = SEEK_END
158#endif
159};
160
161enum class FILE_LOCK : fud_t {
162#ifdef MSTL_PLATFORM_WINDOWS__
163 SHARED = 0,
164 EXCLUSIVE = LOCKFILE_EXCLUSIVE_LOCK,
165 FAIL_IMMEDIATELY = LOCKFILE_FAIL_IMMEDIATELY,
166 SHARED_NB = LOCKFILE_FAIL_IMMEDIATELY,
167 EXCLUSIVE_NB = LOCKFILE_EXCLUSIVE_LOCK | LOCKFILE_FAIL_IMMEDIATELY
168#elif defined(MSTL_PLATFORM_LINUX__)
169 SHARED = LOCK_SH,
170 EXCLUSIVE = LOCK_EX,
171 FAIL_IMMEDIATELY = LOCK_NB,
172 SHARED_NB = LOCK_SH | LOCK_NB,
173 EXCLUSIVE_NB = LOCK_EX | LOCK_NB
174#endif
175};
176
177constexpr FILE_LOCK operator |(FILE_LOCK a, FILE_LOCK b) {
178 return static_cast<FILE_LOCK>(static_cast<fud_t>(a) | static_cast<fud_t>(b));
179}
180constexpr FILE_LOCK operator &(FILE_LOCK a, FILE_LOCK b) {
181 return static_cast<FILE_LOCK>(static_cast<fud_t>(a) & static_cast<fud_t>(b));
182}
183
184
185enum class FILE_WATCH_EVENT {
186 CREATED = 0x01,
187 DELETED = 0x02,
188 MODIFIED = 0x04,
189 RENAMED = 0x08,
190 ACCESSED = 0x10,
191 ALL = CREATED | DELETED | MODIFIED | RENAMED | ACCESSED
192};
193
194
195enum class FILE_MAP_HINT {
196 NORMAL = 0,
197 SEQUENTIAL,
198 RANDOM
199};
200
201
202MSTL_INLINE17 constexpr size_t FILE_BUFFER_SIZE = 8192; // 8KB Buffer
203
205#endif // MSTL_CORE_FILE_FILE_CONSTANTS_HPP__
MSTL核心配置
constexpr memory_order operator|(memory_order mo, memory_order_modifier mod) noexcept
内存顺序与修饰符的或操作符
constexpr memory_order operator&(memory_order mo, memory_order_modifier mod) noexcept
内存顺序与修饰符的与操作符
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL