libstdc++
bits/fs_fwd.h
Go to the documentation of this file.
1 // Filesystem declarations -*- C++ -*-
2 
3 // Copyright (C) 2014-2020 Free Software Foundation, Inc.
4 //
5 // This file is part of the GNU ISO C++ Library. This library is free
6 // software; you can redistribute it and/or modify it under the
7 // terms of the GNU General Public License as published by the
8 // Free Software Foundation; either version 3, or (at your option)
9 // any later version.
10 
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
15 
16 // Under Section 7 of GPL version 3, you are granted additional
17 // permissions described in the GCC Runtime Library Exception, version
18 // 3.1, as published by the Free Software Foundation.
19 
20 // You should have received a copy of the GNU General Public License and
21 // a copy of the GCC Runtime Library Exception along with this program;
22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23 // <http://www.gnu.org/licenses/>.
24 
25 /** @file include/bits/fs_fwd.h
26  * This is an internal header file, included by other library headers.
27  * Do not attempt to use it directly. @headername{filesystem}
28  */
29 
30 #ifndef _GLIBCXX_FS_FWD_H
31 #define _GLIBCXX_FS_FWD_H 1
32 
33 #if __cplusplus >= 201703L
34 
35 #include <system_error>
36 #include <cstdint>
37 #include <chrono>
38 
39 namespace std _GLIBCXX_VISIBILITY(default)
40 {
41 _GLIBCXX_BEGIN_NAMESPACE_VERSION
42 
43 /** @addtogroup filesystem
44  * @{
45  */
46 
47 /// ISO C++ 2017 namespace for File System library
48 namespace filesystem
49 {
50 #if _GLIBCXX_USE_CXX11_ABI
51 inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
52 #endif
53 
54 
55  class file_status;
56 _GLIBCXX_BEGIN_NAMESPACE_CXX11
57  class path;
58  class filesystem_error;
59  class directory_entry;
60  class directory_iterator;
61  class recursive_directory_iterator;
62 _GLIBCXX_END_NAMESPACE_CXX11
63 
64  struct space_info
65  {
66  uintmax_t capacity;
67  uintmax_t free;
68  uintmax_t available;
69 
70 #if __cpp_impl_three_way_comparison >= 201907L
71  friend bool operator==(const space_info&, const space_info&) = default;
72 #endif
73  };
74 
75  enum class file_type : signed char {
76  none = 0, not_found = -1, regular = 1, directory = 2, symlink = 3,
77  block = 4, character = 5, fifo = 6, socket = 7, unknown = 8
78  };
79 
80  /// Bitmask type
81  enum class copy_options : unsigned short {
82  none = 0,
83  skip_existing = 1, overwrite_existing = 2, update_existing = 4,
84  recursive = 8,
85  copy_symlinks = 16, skip_symlinks = 32,
86  directories_only = 64, create_symlinks = 128, create_hard_links = 256
87  };
88 
89  constexpr copy_options
90  operator&(copy_options __x, copy_options __y) noexcept
91  {
92  using __utype = typename std::underlying_type<copy_options>::type;
93  return static_cast<copy_options>(
94  static_cast<__utype>(__x) & static_cast<__utype>(__y));
95  }
96 
97  constexpr copy_options
98  operator|(copy_options __x, copy_options __y) noexcept
99  {
100  using __utype = typename std::underlying_type<copy_options>::type;
101  return static_cast<copy_options>(
102  static_cast<__utype>(__x) | static_cast<__utype>(__y));
103  }
104 
105  constexpr copy_options
106  operator^(copy_options __x, copy_options __y) noexcept
107  {
108  using __utype = typename std::underlying_type<copy_options>::type;
109  return static_cast<copy_options>(
110  static_cast<__utype>(__x) ^ static_cast<__utype>(__y));
111  }
112 
113  constexpr copy_options
114  operator~(copy_options __x) noexcept
115  {
116  using __utype = typename std::underlying_type<copy_options>::type;
117  return static_cast<copy_options>(~static_cast<__utype>(__x));
118  }
119 
120  inline copy_options&
121  operator&=(copy_options& __x, copy_options __y) noexcept
122  { return __x = __x & __y; }
123 
124  inline copy_options&
125  operator|=(copy_options& __x, copy_options __y) noexcept
126  { return __x = __x | __y; }
127 
128  inline copy_options&
129  operator^=(copy_options& __x, copy_options __y) noexcept
130  { return __x = __x ^ __y; }
131 
132 
133  /// Bitmask type
134  enum class perms : unsigned {
135  none = 0,
136  owner_read = 0400,
137  owner_write = 0200,
138  owner_exec = 0100,
139  owner_all = 0700,
140  group_read = 040,
141  group_write = 020,
142  group_exec = 010,
143  group_all = 070,
144  others_read = 04,
145  others_write = 02,
146  others_exec = 01,
147  others_all = 07,
148  all = 0777,
149  set_uid = 04000,
150  set_gid = 02000,
151  sticky_bit = 01000,
152  mask = 07777,
153  unknown = 0xFFFF,
154  };
155 
156  constexpr perms
157  operator&(perms __x, perms __y) noexcept
158  {
159  using __utype = typename std::underlying_type<perms>::type;
160  return static_cast<perms>(
161  static_cast<__utype>(__x) & static_cast<__utype>(__y));
162  }
163 
164  constexpr perms
165  operator|(perms __x, perms __y) noexcept
166  {
167  using __utype = typename std::underlying_type<perms>::type;
168  return static_cast<perms>(
169  static_cast<__utype>(__x) | static_cast<__utype>(__y));
170  }
171 
172  constexpr perms
173  operator^(perms __x, perms __y) noexcept
174  {
175  using __utype = typename std::underlying_type<perms>::type;
176  return static_cast<perms>(
177  static_cast<__utype>(__x) ^ static_cast<__utype>(__y));
178  }
179 
180  constexpr perms
181  operator~(perms __x) noexcept
182  {
183  using __utype = typename std::underlying_type<perms>::type;
184  return static_cast<perms>(~static_cast<__utype>(__x));
185  }
186 
187  inline perms&
188  operator&=(perms& __x, perms __y) noexcept
189  { return __x = __x & __y; }
190 
191  inline perms&
192  operator|=(perms& __x, perms __y) noexcept
193  { return __x = __x | __y; }
194 
195  inline perms&
196  operator^=(perms& __x, perms __y) noexcept
197  { return __x = __x ^ __y; }
198 
199  /// Bitmask type
200  enum class perm_options : unsigned {
201  replace = 0x1,
202  add = 0x2,
203  remove = 0x4,
204  nofollow = 0x8
205  };
206 
207  constexpr perm_options
208  operator&(perm_options __x, perm_options __y) noexcept
209  {
210  using __utype = typename std::underlying_type<perm_options>::type;
211  return static_cast<perm_options>(
212  static_cast<__utype>(__x) & static_cast<__utype>(__y));
213  }
214 
215  constexpr perm_options
216  operator|(perm_options __x, perm_options __y) noexcept
217  {
218  using __utype = typename std::underlying_type<perm_options>::type;
219  return static_cast<perm_options>(
220  static_cast<__utype>(__x) | static_cast<__utype>(__y));
221  }
222 
223  constexpr perm_options
224  operator^(perm_options __x, perm_options __y) noexcept
225  {
226  using __utype = typename std::underlying_type<perm_options>::type;
227  return static_cast<perm_options>(
228  static_cast<__utype>(__x) ^ static_cast<__utype>(__y));
229  }
230 
231  constexpr perm_options
232  operator~(perm_options __x) noexcept
233  {
234  using __utype = typename std::underlying_type<perm_options>::type;
235  return static_cast<perm_options>(~static_cast<__utype>(__x));
236  }
237 
238  inline perm_options&
239  operator&=(perm_options& __x, perm_options __y) noexcept
240  { return __x = __x & __y; }
241 
242  inline perm_options&
243  operator|=(perm_options& __x, perm_options __y) noexcept
244  { return __x = __x | __y; }
245 
246  inline perm_options&
247  operator^=(perm_options& __x, perm_options __y) noexcept
248  { return __x = __x ^ __y; }
249 
250  // Bitmask type
251  enum class directory_options : unsigned char {
252  none = 0, follow_directory_symlink = 1, skip_permission_denied = 2
253  };
254 
255  constexpr directory_options
256  operator&(directory_options __x, directory_options __y) noexcept
257  {
258  using __utype = typename std::underlying_type<directory_options>::type;
259  return static_cast<directory_options>(
260  static_cast<__utype>(__x) & static_cast<__utype>(__y));
261  }
262 
263  constexpr directory_options
264  operator|(directory_options __x, directory_options __y) noexcept
265  {
266  using __utype = typename std::underlying_type<directory_options>::type;
267  return static_cast<directory_options>(
268  static_cast<__utype>(__x) | static_cast<__utype>(__y));
269  }
270 
271  constexpr directory_options
272  operator^(directory_options __x, directory_options __y) noexcept
273  {
274  using __utype = typename std::underlying_type<directory_options>::type;
275  return static_cast<directory_options>(
276  static_cast<__utype>(__x) ^ static_cast<__utype>(__y));
277  }
278 
279  constexpr directory_options
280  operator~(directory_options __x) noexcept
281  {
282  using __utype = typename std::underlying_type<directory_options>::type;
283  return static_cast<directory_options>(~static_cast<__utype>(__x));
284  }
285 
286  inline directory_options&
287  operator&=(directory_options& __x, directory_options __y) noexcept
288  { return __x = __x & __y; }
289 
290  inline directory_options&
291  operator|=(directory_options& __x, directory_options __y) noexcept
292  { return __x = __x | __y; }
293 
294  inline directory_options&
295  operator^=(directory_options& __x, directory_options __y) noexcept
296  { return __x = __x ^ __y; }
297 
298  using file_time_type = __file_clock::time_point;
299 
300  // operational functions
301 
302  void copy(const path& __from, const path& __to, copy_options __options);
303  void copy(const path& __from, const path& __to, copy_options __options,
304  error_code&);
305 
306  bool copy_file(const path& __from, const path& __to, copy_options __option);
307  bool copy_file(const path& __from, const path& __to, copy_options __option,
308  error_code&);
309 
310  path current_path();
311 
312  bool exists(file_status) noexcept;
313 
314  bool is_other(file_status) noexcept;
315 
316  uintmax_t file_size(const path&);
317  uintmax_t file_size(const path&, error_code&) noexcept;
318  uintmax_t hard_link_count(const path&);
319  uintmax_t hard_link_count(const path&, error_code&) noexcept;
320  file_time_type last_write_time(const path&);
321  file_time_type last_write_time(const path&, error_code&) noexcept;
322 
323  void permissions(const path&, perms, perm_options, error_code&) noexcept;
324 
325  path proximate(const path& __p, const path& __base, error_code& __ec);
326  path proximate(const path& __p, const path& __base, error_code& __ec);
327 
328  path relative(const path& __p, const path& __base, error_code& __ec);
329 
330  file_status status(const path&);
331  file_status status(const path&, error_code&) noexcept;
332 
333  bool status_known(file_status) noexcept;
334 
335  file_status symlink_status(const path&);
336  file_status symlink_status(const path&, error_code&) noexcept;
337 
338  bool is_regular_file(file_status) noexcept;
339  bool is_symlink(file_status) noexcept;
340 
341 } // namespace filesystem
342 /// @}
343 _GLIBCXX_END_NAMESPACE_VERSION
344 } // namespace std
345 #endif // C++17
346 #endif // _GLIBCXX_FS_FWD_H
ISO C++ entities toplevel namespace is std.
bitset< _Nb > operator^(const bitset< _Nb > &__x, const bitset< _Nb > &__y) noexcept
Global bitwise operations on bitsets.
Definition: bitset:1453
bitset< _Nb > operator|(const bitset< _Nb > &__x, const bitset< _Nb > &__y) noexcept
Global bitwise operations on bitsets.
Definition: bitset:1444
bitset< _Nb > operator&(const bitset< _Nb > &__x, const bitset< _Nb > &__y) noexcept
Global bitwise operations on bitsets.
Definition: bitset:1435
constexpr _Iterator __base(_Iterator __it)