1// -*- C++ -*-
2//===----------------------------------------------------------------------===//
3//
4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5// See https://llvm.org/LICENSE.txt for license information.
6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7//
8//===----------------------------------------------------------------------===//
9#ifndef _LIBCPP_FILESYSTEM
10#define _LIBCPP_FILESYSTEM
11
12/*
13 filesystem synopsis
14
15 namespace std::filesystem {
16
17 class path;
18
19 void swap(path& lhs, path& rhs) noexcept;
20 size_t hash_value(const path& p) noexcept;
21
22 bool operator==(const path& lhs, const path& rhs) noexcept;
23 bool operator!=(const path& lhs, const path& rhs) noexcept;
24 bool operator< (const path& lhs, const path& rhs) noexcept;
25 bool operator<=(const path& lhs, const path& rhs) noexcept;
26 bool operator> (const path& lhs, const path& rhs) noexcept;
27 bool operator>=(const path& lhs, const path& rhs) noexcept;
28
29 path operator/ (const path& lhs, const path& rhs);
30
31 // fs.path.io operators are friends of path.
32 template <class charT, class traits>
33 friend basic_ostream<charT, traits>&
34 operator<<(basic_ostream<charT, traits>& os, const path& p);
35
36 template <class charT, class traits>
37 friend basic_istream<charT, traits>&
38 operator>>(basic_istream<charT, traits>& is, path& p);
39
40 template <class Source>
41 path u8path(const Source& source);
42 template <class InputIterator>
43 path u8path(InputIterator first, InputIterator last);
44
45 class filesystem_error;
46 class directory_entry;
47
48 class directory_iterator;
49
50 // enable directory_iterator range-based for statements
51 directory_iterator begin(directory_iterator iter) noexcept;
52 directory_iterator end(directory_iterator) noexcept;
53
54 class recursive_directory_iterator;
55
56 // enable recursive_directory_iterator range-based for statements
57 recursive_directory_iterator begin(recursive_directory_iterator iter) noexcept;
58 recursive_directory_iterator end(recursive_directory_iterator) noexcept;
59
60 class file_status;
61
62 struct space_info
63 {
64 uintmax_t capacity;
65 uintmax_t free;
66 uintmax_t available;
67 };
68
69 enum class file_type;
70 enum class perms;
71 enum class perm_options;
72 enum class copy_options;
73 enum class directory_options;
74
75 typedef chrono::time_point<trivial-clock> file_time_type;
76
77 // operational functions
78
79 path absolute(const path& p);
80 path absolute(const path& p, error_code &ec);
81
82 path canonical(const path& p);
83 path canonical(const path& p, error_code& ec);
84
85 void copy(const path& from, const path& to);
86 void copy(const path& from, const path& to, error_code& ec);
87 void copy(const path& from, const path& to, copy_options options);
88 void copy(const path& from, const path& to, copy_options options,
89 error_code& ec);
90
91 bool copy_file(const path& from, const path& to);
92 bool copy_file(const path& from, const path& to, error_code& ec);
93 bool copy_file(const path& from, const path& to, copy_options option);
94 bool copy_file(const path& from, const path& to, copy_options option,
95 error_code& ec);
96
97 void copy_symlink(const path& existing_symlink, const path& new_symlink);
98 void copy_symlink(const path& existing_symlink, const path& new_symlink,
99 error_code& ec) noexcept;
100
101 bool create_directories(const path& p);
102 bool create_directories(const path& p, error_code& ec);
103
104 bool create_directory(const path& p);
105 bool create_directory(const path& p, error_code& ec) noexcept;
106
107 bool create_directory(const path& p, const path& attributes);
108 bool create_directory(const path& p, const path& attributes,
109 error_code& ec) noexcept;
110
111 void create_directory_symlink(const path& to, const path& new_symlink);
112 void create_directory_symlink(const path& to, const path& new_symlink,
113 error_code& ec) noexcept;
114
115 void create_hard_link(const path& to, const path& new_hard_link);
116 void create_hard_link(const path& to, const path& new_hard_link,
117 error_code& ec) noexcept;
118
119 void create_symlink(const path& to, const path& new_symlink);
120 void create_symlink(const path& to, const path& new_symlink,
121 error_code& ec) noexcept;
122
123 path current_path();
124 path current_path(error_code& ec);
125 void current_path(const path& p);
126 void current_path(const path& p, error_code& ec) noexcept;
127
128 bool exists(file_status s) noexcept;
129 bool exists(const path& p);
130 bool exists(const path& p, error_code& ec) noexcept;
131
132 bool equivalent(const path& p1, const path& p2);
133 bool equivalent(const path& p1, const path& p2, error_code& ec) noexcept;
134
135 uintmax_t file_size(const path& p);
136 uintmax_t file_size(const path& p, error_code& ec) noexcept;
137
138 uintmax_t hard_link_count(const path& p);
139 uintmax_t hard_link_count(const path& p, error_code& ec) noexcept;
140
141 bool is_block_file(file_status s) noexcept;
142 bool is_block_file(const path& p);
143 bool is_block_file(const path& p, error_code& ec) noexcept;
144
145 bool is_character_file(file_status s) noexcept;
146 bool is_character_file(const path& p);
147 bool is_character_file(const path& p, error_code& ec) noexcept;
148
149 bool is_directory(file_status s) noexcept;
150 bool is_directory(const path& p);
151 bool is_directory(const path& p, error_code& ec) noexcept;
152
153 bool is_empty(const path& p);
154 bool is_empty(const path& p, error_code& ec) noexcept;
155
156 bool is_fifo(file_status s) noexcept;
157 bool is_fifo(const path& p);
158 bool is_fifo(const path& p, error_code& ec) noexcept;
159
160 bool is_other(file_status s) noexcept;
161 bool is_other(const path& p);
162 bool is_other(const path& p, error_code& ec) noexcept;
163
164 bool is_regular_file(file_status s) noexcept;
165 bool is_regular_file(const path& p);
166 bool is_regular_file(const path& p, error_code& ec) noexcept;
167
168 bool is_socket(file_status s) noexcept;
169 bool is_socket(const path& p);
170 bool is_socket(const path& p, error_code& ec) noexcept;
171
172 bool is_symlink(file_status s) noexcept;
173 bool is_symlink(const path& p);
174 bool is_symlink(const path& p, error_code& ec) noexcept;
175
176 file_time_type last_write_time(const path& p);
177 file_time_type last_write_time(const path& p, error_code& ec) noexcept;
178 void last_write_time(const path& p, file_time_type new_time);
179 void last_write_time(const path& p, file_time_type new_time,
180 error_code& ec) noexcept;
181
182 void permissions(const path& p, perms prms,
183 perm_options opts=perm_options::replace);
184 void permissions(const path& p, perms prms, error_code& ec) noexcept;
185 void permissions(const path& p, perms prms, perm_options opts,
186 error_code& ec);
187
188 path proximate(const path& p, error_code& ec);
189 path proximate(const path& p, const path& base = current_path());
190 path proximate(const path& p, const path& base, error_code &ec);
191
192 path read_symlink(const path& p);
193 path read_symlink(const path& p, error_code& ec);
194
195 path relative(const path& p, error_code& ec);
196 path relative(const path& p, const path& base=current_path());
197 path relative(const path& p, const path& base, error_code& ec);
198
199 bool remove(const path& p);
200 bool remove(const path& p, error_code& ec) noexcept;
201
202 uintmax_t remove_all(const path& p);
203 uintmax_t remove_all(const path& p, error_code& ec);
204
205 void rename(const path& from, const path& to);
206 void rename(const path& from, const path& to, error_code& ec) noexcept;
207
208 void resize_file(const path& p, uintmax_t size);
209 void resize_file(const path& p, uintmax_t size, error_code& ec) noexcept;
210
211 space_info space(const path& p);
212 space_info space(const path& p, error_code& ec) noexcept;
213
214 file_status status(const path& p);
215 file_status status(const path& p, error_code& ec) noexcept;
216
217 bool status_known(file_status s) noexcept;
218
219 file_status symlink_status(const path& p);
220 file_status symlink_status(const path& p, error_code& ec) noexcept;
221
222 path temp_directory_path();
223 path temp_directory_path(error_code& ec);
224
225 path weakly_canonical(path const& p);
226 path weakly_canonical(path const& p, error_code& ec);
227
228} // namespace std::filesystem
229
230template <>
231inline constexpr bool std::ranges::enable_borrowed_range<std::filesystem::directory_iterator> = true;
232template <>
233inline constexpr bool std::ranges::enable_borrowed_range<std::filesystem::recursive_directory_iterator> = true;
234
235template <>
236inline constexpr bool std::ranges::enable_view<std::filesystem::directory_iterator> = true;
237template <>
238inline constexpr bool std::ranges::enable_view<std::filesystem::recursive_directory_iterator> = true;
239
240*/
241
242#include <__assert> // all public C++ headers provide the assertion handler
243#include <__config>
244#include <__filesystem/copy_options.h>
245#include <__filesystem/directory_entry.h>
246#include <__filesystem/directory_iterator.h>
247#include <__filesystem/directory_options.h>
248#include <__filesystem/file_status.h>
249#include <__filesystem/file_time_type.h>
250#include <__filesystem/file_type.h>
251#include <__filesystem/filesystem_error.h>
252#include <__filesystem/operations.h>
253#include <__filesystem/path.h>
254#include <__filesystem/path_iterator.h>
255#include <__filesystem/perm_options.h>
256#include <__filesystem/perms.h>
257#include <__filesystem/recursive_directory_iterator.h>
258#include <__filesystem/space_info.h>
259#include <__filesystem/u8path.h>
260#include <version>
261
262// standard-mandated includes
263#include <compare>
264
265#if defined(_LIBCPP_HAS_NO_FILESYSTEM_LIBRARY)
266# error "The <filesystem> library is not supported since libc++ has been configured without support for a filesystem."
267#endif
268
269#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
270# pragma GCC system_header
271#endif
272
273#endif // _LIBCPP_FILESYSTEM
274

source code of flutter_engine/third_party/libcxx/include/filesystem