]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/libc++/include/experimental/filesystem
Merge libc++ trunk r338150, and resolve conflicts.
[FreeBSD/FreeBSD.git] / contrib / libc++ / include / experimental / filesystem
1 // -*- C++ -*-
2 //===--------------------------- filesystem -------------------------------===//
3 //
4 //                     The LLVM Compiler Infrastructure
5 //
6 // This file is dual licensed under the MIT and the University of Illinois Open
7 // Source Licenses. See LICENSE.TXT for details.
8 //
9 //===----------------------------------------------------------------------===//
10 #ifndef _LIBCPP_EXPERIMENTAL_FILESYSTEM
11 #define _LIBCPP_EXPERIMENTAL_FILESYSTEM
12 /*
13     filesystem synopsis
14
15     namespace std { namespace experimental { namespace filesystem { inline namespace v1 {
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(const 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(const 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
229 } } } }  // namespaces std::experimental::filesystem::v1
230
231 */
232
233 #include <experimental/__config>
234 #include <filesystem>
235
236 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
237 #pragma GCC system_header
238 #endif
239
240 _LIBCPP_PUSH_MACROS
241 #include <__undef_macros>
242
243 #ifndef _LIBCPP_CXX03_LANG
244
245 #define __cpp_lib_experimental_filesystem 201406
246
247 _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_FILESYSTEM
248
249 using namespace _VSTD_FS;
250
251 _LIBCPP_END_NAMESPACE_EXPERIMENTAL_FILESYSTEM
252
253 #endif // !_LIBCPP_CXX03_LANG
254
255 _LIBCPP_POP_MACROS
256
257 #endif // _LIBCPP_EXPERIMENTAL_FILESYSTEM