xref: /aosp_15_r20/external/libcxx/include/experimental/filesystem (revision 58b9f456b02922dfdb1fad8a988d5fd8765ecb80)
1*58b9f456SAndroid Build Coastguard Worker// -*- C++ -*-
2*58b9f456SAndroid Build Coastguard Worker//===--------------------------- filesystem -------------------------------===//
3*58b9f456SAndroid Build Coastguard Worker//
4*58b9f456SAndroid Build Coastguard Worker//                     The LLVM Compiler Infrastructure
5*58b9f456SAndroid Build Coastguard Worker//
6*58b9f456SAndroid Build Coastguard Worker// This file is dual licensed under the MIT and the University of Illinois Open
7*58b9f456SAndroid Build Coastguard Worker// Source Licenses. See LICENSE.TXT for details.
8*58b9f456SAndroid Build Coastguard Worker//
9*58b9f456SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
10*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_EXPERIMENTAL_FILESYSTEM
11*58b9f456SAndroid Build Coastguard Worker#define _LIBCPP_EXPERIMENTAL_FILESYSTEM
12*58b9f456SAndroid Build Coastguard Worker/*
13*58b9f456SAndroid Build Coastguard Worker    filesystem synopsis
14*58b9f456SAndroid Build Coastguard Worker
15*58b9f456SAndroid Build Coastguard Worker    namespace std { namespace experimental { namespace filesystem { inline namespace v1 {
16*58b9f456SAndroid Build Coastguard Worker
17*58b9f456SAndroid Build Coastguard Worker    class path;
18*58b9f456SAndroid Build Coastguard Worker
19*58b9f456SAndroid Build Coastguard Worker    void swap(path& lhs, path& rhs) noexcept;
20*58b9f456SAndroid Build Coastguard Worker    size_t hash_value(const path& p) noexcept;
21*58b9f456SAndroid Build Coastguard Worker
22*58b9f456SAndroid Build Coastguard Worker    bool operator==(const path& lhs, const path& rhs) noexcept;
23*58b9f456SAndroid Build Coastguard Worker    bool operator!=(const path& lhs, const path& rhs) noexcept;
24*58b9f456SAndroid Build Coastguard Worker    bool operator< (const path& lhs, const path& rhs) noexcept;
25*58b9f456SAndroid Build Coastguard Worker    bool operator<=(const path& lhs, const path& rhs) noexcept;
26*58b9f456SAndroid Build Coastguard Worker    bool operator> (const path& lhs, const path& rhs) noexcept;
27*58b9f456SAndroid Build Coastguard Worker    bool operator>=(const path& lhs, const path& rhs) noexcept;
28*58b9f456SAndroid Build Coastguard Worker
29*58b9f456SAndroid Build Coastguard Worker    path operator/ (const path& lhs, const path& rhs);
30*58b9f456SAndroid Build Coastguard Worker
31*58b9f456SAndroid Build Coastguard Worker    // fs.path.io operators are friends of path.
32*58b9f456SAndroid Build Coastguard Worker    template <class charT, class traits>
33*58b9f456SAndroid Build Coastguard Worker    friend basic_ostream<charT, traits>&
34*58b9f456SAndroid Build Coastguard Worker    operator<<(basic_ostream<charT, traits>& os, const path& p);
35*58b9f456SAndroid Build Coastguard Worker
36*58b9f456SAndroid Build Coastguard Worker    template <class charT, class traits>
37*58b9f456SAndroid Build Coastguard Worker    friend basic_istream<charT, traits>&
38*58b9f456SAndroid Build Coastguard Worker    operator>>(basic_istream<charT, traits>& is, path& p);
39*58b9f456SAndroid Build Coastguard Worker
40*58b9f456SAndroid Build Coastguard Worker    template <class Source>
41*58b9f456SAndroid Build Coastguard Worker      path u8path(const Source& source);
42*58b9f456SAndroid Build Coastguard Worker    template <class InputIterator>
43*58b9f456SAndroid Build Coastguard Worker      path u8path(InputIterator first, InputIterator last);
44*58b9f456SAndroid Build Coastguard Worker
45*58b9f456SAndroid Build Coastguard Worker    class filesystem_error;
46*58b9f456SAndroid Build Coastguard Worker    class directory_entry;
47*58b9f456SAndroid Build Coastguard Worker
48*58b9f456SAndroid Build Coastguard Worker    class directory_iterator;
49*58b9f456SAndroid Build Coastguard Worker
50*58b9f456SAndroid Build Coastguard Worker    // enable directory_iterator range-based for statements
51*58b9f456SAndroid Build Coastguard Worker    directory_iterator begin(directory_iterator iter) noexcept;
52*58b9f456SAndroid Build Coastguard Worker    directory_iterator end(const directory_iterator&) noexcept;
53*58b9f456SAndroid Build Coastguard Worker
54*58b9f456SAndroid Build Coastguard Worker    class recursive_directory_iterator;
55*58b9f456SAndroid Build Coastguard Worker
56*58b9f456SAndroid Build Coastguard Worker    // enable recursive_directory_iterator range-based for statements
57*58b9f456SAndroid Build Coastguard Worker    recursive_directory_iterator begin(recursive_directory_iterator iter) noexcept;
58*58b9f456SAndroid Build Coastguard Worker    recursive_directory_iterator end(const recursive_directory_iterator&) noexcept;
59*58b9f456SAndroid Build Coastguard Worker
60*58b9f456SAndroid Build Coastguard Worker    class file_status;
61*58b9f456SAndroid Build Coastguard Worker
62*58b9f456SAndroid Build Coastguard Worker    struct space_info
63*58b9f456SAndroid Build Coastguard Worker    {
64*58b9f456SAndroid Build Coastguard Worker      uintmax_t capacity;
65*58b9f456SAndroid Build Coastguard Worker      uintmax_t free;
66*58b9f456SAndroid Build Coastguard Worker      uintmax_t available;
67*58b9f456SAndroid Build Coastguard Worker    };
68*58b9f456SAndroid Build Coastguard Worker
69*58b9f456SAndroid Build Coastguard Worker    enum class file_type;
70*58b9f456SAndroid Build Coastguard Worker    enum class perms;
71*58b9f456SAndroid Build Coastguard Worker    enum class perm_options;
72*58b9f456SAndroid Build Coastguard Worker    enum class copy_options;
73*58b9f456SAndroid Build Coastguard Worker    enum class directory_options;
74*58b9f456SAndroid Build Coastguard Worker
75*58b9f456SAndroid Build Coastguard Worker    typedef chrono::time_point<trivial-clock>  file_time_type;
76*58b9f456SAndroid Build Coastguard Worker
77*58b9f456SAndroid Build Coastguard Worker    // operational functions
78*58b9f456SAndroid Build Coastguard Worker
79*58b9f456SAndroid Build Coastguard Worker    path absolute(const path& p);
80*58b9f456SAndroid Build Coastguard Worker    path absolute(const path& p, error_code &ec);
81*58b9f456SAndroid Build Coastguard Worker
82*58b9f456SAndroid Build Coastguard Worker    path canonical(const path& p);
83*58b9f456SAndroid Build Coastguard Worker    path canonical(const path& p, error_code& ec);
84*58b9f456SAndroid Build Coastguard Worker
85*58b9f456SAndroid Build Coastguard Worker    void copy(const path& from, const path& to);
86*58b9f456SAndroid Build Coastguard Worker    void copy(const path& from, const path& to, error_code& ec);
87*58b9f456SAndroid Build Coastguard Worker    void copy(const path& from, const path& to, copy_options options);
88*58b9f456SAndroid Build Coastguard Worker    void copy(const path& from, const path& to, copy_options options,
89*58b9f456SAndroid Build Coastguard Worker                   error_code& ec);
90*58b9f456SAndroid Build Coastguard Worker
91*58b9f456SAndroid Build Coastguard Worker    bool copy_file(const path& from, const path& to);
92*58b9f456SAndroid Build Coastguard Worker    bool copy_file(const path& from, const path& to, error_code& ec);
93*58b9f456SAndroid Build Coastguard Worker    bool copy_file(const path& from, const path& to, copy_options option);
94*58b9f456SAndroid Build Coastguard Worker    bool copy_file(const path& from, const path& to, copy_options option,
95*58b9f456SAndroid Build Coastguard Worker                           error_code& ec);
96*58b9f456SAndroid Build Coastguard Worker
97*58b9f456SAndroid Build Coastguard Worker    void copy_symlink(const path& existing_symlink, const path& new_symlink);
98*58b9f456SAndroid Build Coastguard Worker    void copy_symlink(const path& existing_symlink, const path& new_symlink,
99*58b9f456SAndroid Build Coastguard Worker                              error_code& ec) noexcept;
100*58b9f456SAndroid Build Coastguard Worker
101*58b9f456SAndroid Build Coastguard Worker    bool create_directories(const path& p);
102*58b9f456SAndroid Build Coastguard Worker    bool create_directories(const path& p, error_code& ec);
103*58b9f456SAndroid Build Coastguard Worker
104*58b9f456SAndroid Build Coastguard Worker    bool create_directory(const path& p);
105*58b9f456SAndroid Build Coastguard Worker    bool create_directory(const path& p, error_code& ec) noexcept;
106*58b9f456SAndroid Build Coastguard Worker
107*58b9f456SAndroid Build Coastguard Worker    bool create_directory(const path& p, const path& attributes);
108*58b9f456SAndroid Build Coastguard Worker    bool create_directory(const path& p, const path& attributes,
109*58b9f456SAndroid Build Coastguard Worker                                  error_code& ec) noexcept;
110*58b9f456SAndroid Build Coastguard Worker
111*58b9f456SAndroid Build Coastguard Worker    void create_directory_symlink(const path& to, const path& new_symlink);
112*58b9f456SAndroid Build Coastguard Worker    void create_directory_symlink(const path& to, const path& new_symlink,
113*58b9f456SAndroid Build Coastguard Worker                                          error_code& ec) noexcept;
114*58b9f456SAndroid Build Coastguard Worker
115*58b9f456SAndroid Build Coastguard Worker    void create_hard_link(const path& to, const path& new_hard_link);
116*58b9f456SAndroid Build Coastguard Worker    void create_hard_link(const path& to, const path& new_hard_link,
117*58b9f456SAndroid Build Coastguard Worker                                  error_code& ec) noexcept;
118*58b9f456SAndroid Build Coastguard Worker
119*58b9f456SAndroid Build Coastguard Worker    void create_symlink(const path& to, const path& new_symlink);
120*58b9f456SAndroid Build Coastguard Worker    void create_symlink(const path& to, const path& new_symlink,
121*58b9f456SAndroid Build Coastguard Worker                                error_code& ec) noexcept;
122*58b9f456SAndroid Build Coastguard Worker
123*58b9f456SAndroid Build Coastguard Worker    path current_path();
124*58b9f456SAndroid Build Coastguard Worker    path current_path(error_code& ec);
125*58b9f456SAndroid Build Coastguard Worker    void current_path(const path& p);
126*58b9f456SAndroid Build Coastguard Worker    void current_path(const path& p, error_code& ec) noexcept;
127*58b9f456SAndroid Build Coastguard Worker
128*58b9f456SAndroid Build Coastguard Worker    bool exists(file_status s) noexcept;
129*58b9f456SAndroid Build Coastguard Worker    bool exists(const path& p);
130*58b9f456SAndroid Build Coastguard Worker    bool exists(const path& p, error_code& ec) noexcept;
131*58b9f456SAndroid Build Coastguard Worker
132*58b9f456SAndroid Build Coastguard Worker    bool equivalent(const path& p1, const path& p2);
133*58b9f456SAndroid Build Coastguard Worker    bool equivalent(const path& p1, const path& p2, error_code& ec) noexcept;
134*58b9f456SAndroid Build Coastguard Worker
135*58b9f456SAndroid Build Coastguard Worker    uintmax_t    file_size(const path& p);
136*58b9f456SAndroid Build Coastguard Worker    uintmax_t    file_size(const path& p, error_code& ec) noexcept;
137*58b9f456SAndroid Build Coastguard Worker
138*58b9f456SAndroid Build Coastguard Worker    uintmax_t    hard_link_count(const path& p);
139*58b9f456SAndroid Build Coastguard Worker    uintmax_t    hard_link_count(const path& p, error_code& ec) noexcept;
140*58b9f456SAndroid Build Coastguard Worker
141*58b9f456SAndroid Build Coastguard Worker    bool is_block_file(file_status s) noexcept;
142*58b9f456SAndroid Build Coastguard Worker    bool is_block_file(const path& p);
143*58b9f456SAndroid Build Coastguard Worker    bool is_block_file(const path& p, error_code& ec) noexcept;
144*58b9f456SAndroid Build Coastguard Worker
145*58b9f456SAndroid Build Coastguard Worker    bool is_character_file(file_status s) noexcept;
146*58b9f456SAndroid Build Coastguard Worker    bool is_character_file(const path& p);
147*58b9f456SAndroid Build Coastguard Worker    bool is_character_file(const path& p, error_code& ec) noexcept;
148*58b9f456SAndroid Build Coastguard Worker
149*58b9f456SAndroid Build Coastguard Worker    bool is_directory(file_status s) noexcept;
150*58b9f456SAndroid Build Coastguard Worker    bool is_directory(const path& p);
151*58b9f456SAndroid Build Coastguard Worker    bool is_directory(const path& p, error_code& ec) noexcept;
152*58b9f456SAndroid Build Coastguard Worker
153*58b9f456SAndroid Build Coastguard Worker    bool is_empty(const path& p);
154*58b9f456SAndroid Build Coastguard Worker    bool is_empty(const path& p, error_code& ec) noexcept;
155*58b9f456SAndroid Build Coastguard Worker
156*58b9f456SAndroid Build Coastguard Worker    bool is_fifo(file_status s) noexcept;
157*58b9f456SAndroid Build Coastguard Worker    bool is_fifo(const path& p);
158*58b9f456SAndroid Build Coastguard Worker    bool is_fifo(const path& p, error_code& ec) noexcept;
159*58b9f456SAndroid Build Coastguard Worker
160*58b9f456SAndroid Build Coastguard Worker    bool is_other(file_status s) noexcept;
161*58b9f456SAndroid Build Coastguard Worker    bool is_other(const path& p);
162*58b9f456SAndroid Build Coastguard Worker    bool is_other(const path& p, error_code& ec) noexcept;
163*58b9f456SAndroid Build Coastguard Worker
164*58b9f456SAndroid Build Coastguard Worker    bool is_regular_file(file_status s) noexcept;
165*58b9f456SAndroid Build Coastguard Worker    bool is_regular_file(const path& p);
166*58b9f456SAndroid Build Coastguard Worker    bool is_regular_file(const path& p, error_code& ec) noexcept;
167*58b9f456SAndroid Build Coastguard Worker
168*58b9f456SAndroid Build Coastguard Worker    bool is_socket(file_status s) noexcept;
169*58b9f456SAndroid Build Coastguard Worker    bool is_socket(const path& p);
170*58b9f456SAndroid Build Coastguard Worker    bool is_socket(const path& p, error_code& ec) noexcept;
171*58b9f456SAndroid Build Coastguard Worker
172*58b9f456SAndroid Build Coastguard Worker    bool is_symlink(file_status s) noexcept;
173*58b9f456SAndroid Build Coastguard Worker    bool is_symlink(const path& p);
174*58b9f456SAndroid Build Coastguard Worker    bool is_symlink(const path& p, error_code& ec) noexcept;
175*58b9f456SAndroid Build Coastguard Worker
176*58b9f456SAndroid Build Coastguard Worker    file_time_type  last_write_time(const path& p);
177*58b9f456SAndroid Build Coastguard Worker    file_time_type  last_write_time(const path& p, error_code& ec) noexcept;
178*58b9f456SAndroid Build Coastguard Worker    void last_write_time(const path& p, file_time_type new_time);
179*58b9f456SAndroid Build Coastguard Worker    void last_write_time(const path& p, file_time_type new_time,
180*58b9f456SAndroid Build Coastguard Worker                                 error_code& ec) noexcept;
181*58b9f456SAndroid Build Coastguard Worker
182*58b9f456SAndroid Build Coastguard Worker    void permissions(const path& p, perms prms,
183*58b9f456SAndroid Build Coastguard Worker                     perm_options opts=perm_options::replace);
184*58b9f456SAndroid Build Coastguard Worker    void permissions(const path& p, perms prms, error_code& ec) noexcept;
185*58b9f456SAndroid Build Coastguard Worker    void permissions(const path& p, perms prms, perm_options opts,
186*58b9f456SAndroid Build Coastguard Worker                     error_code& ec);
187*58b9f456SAndroid Build Coastguard Worker
188*58b9f456SAndroid Build Coastguard Worker    path proximate(const path& p, error_code& ec);
189*58b9f456SAndroid Build Coastguard Worker    path proximate(const path& p, const path& base = current_path());
190*58b9f456SAndroid Build Coastguard Worker    path proximate(const path& p, const path& base, error_code &ec);
191*58b9f456SAndroid Build Coastguard Worker
192*58b9f456SAndroid Build Coastguard Worker    path read_symlink(const path& p);
193*58b9f456SAndroid Build Coastguard Worker    path read_symlink(const path& p, error_code& ec);
194*58b9f456SAndroid Build Coastguard Worker
195*58b9f456SAndroid Build Coastguard Worker    path relative(const path& p, error_code& ec);
196*58b9f456SAndroid Build Coastguard Worker    path relative(const path& p, const path& base=current_path());
197*58b9f456SAndroid Build Coastguard Worker    path relative(const path& p, const path& base, error_code& ec);
198*58b9f456SAndroid Build Coastguard Worker
199*58b9f456SAndroid Build Coastguard Worker    bool remove(const path& p);
200*58b9f456SAndroid Build Coastguard Worker    bool remove(const path& p, error_code& ec) noexcept;
201*58b9f456SAndroid Build Coastguard Worker
202*58b9f456SAndroid Build Coastguard Worker    uintmax_t    remove_all(const path& p);
203*58b9f456SAndroid Build Coastguard Worker    uintmax_t    remove_all(const path& p, error_code& ec);
204*58b9f456SAndroid Build Coastguard Worker
205*58b9f456SAndroid Build Coastguard Worker    void rename(const path& from, const path& to);
206*58b9f456SAndroid Build Coastguard Worker    void rename(const path& from, const path& to, error_code& ec) noexcept;
207*58b9f456SAndroid Build Coastguard Worker
208*58b9f456SAndroid Build Coastguard Worker    void resize_file(const path& p, uintmax_t size);
209*58b9f456SAndroid Build Coastguard Worker    void resize_file(const path& p, uintmax_t size, error_code& ec) noexcept;
210*58b9f456SAndroid Build Coastguard Worker
211*58b9f456SAndroid Build Coastguard Worker    space_info   space(const path& p);
212*58b9f456SAndroid Build Coastguard Worker    space_info   space(const path& p, error_code& ec) noexcept;
213*58b9f456SAndroid Build Coastguard Worker
214*58b9f456SAndroid Build Coastguard Worker    file_status  status(const path& p);
215*58b9f456SAndroid Build Coastguard Worker    file_status  status(const path& p, error_code& ec) noexcept;
216*58b9f456SAndroid Build Coastguard Worker
217*58b9f456SAndroid Build Coastguard Worker    bool status_known(file_status s) noexcept;
218*58b9f456SAndroid Build Coastguard Worker
219*58b9f456SAndroid Build Coastguard Worker    file_status  symlink_status(const path& p);
220*58b9f456SAndroid Build Coastguard Worker    file_status  symlink_status(const path& p, error_code& ec) noexcept;
221*58b9f456SAndroid Build Coastguard Worker
222*58b9f456SAndroid Build Coastguard Worker    path temp_directory_path();
223*58b9f456SAndroid Build Coastguard Worker    path temp_directory_path(error_code& ec);
224*58b9f456SAndroid Build Coastguard Worker
225*58b9f456SAndroid Build Coastguard Worker    path weakly_canonical(path const& p);
226*58b9f456SAndroid Build Coastguard Worker    path weakly_canonical(path const& p, error_code& ec);
227*58b9f456SAndroid Build Coastguard Worker
228*58b9f456SAndroid Build Coastguard Worker
229*58b9f456SAndroid Build Coastguard Worker} } } }  // namespaces std::experimental::filesystem::v1
230*58b9f456SAndroid Build Coastguard Worker
231*58b9f456SAndroid Build Coastguard Worker*/
232*58b9f456SAndroid Build Coastguard Worker
233*58b9f456SAndroid Build Coastguard Worker#include <experimental/__config>
234*58b9f456SAndroid Build Coastguard Worker#include <filesystem>
235*58b9f456SAndroid Build Coastguard Worker
236*58b9f456SAndroid Build Coastguard Worker#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
237*58b9f456SAndroid Build Coastguard Worker#pragma GCC system_header
238*58b9f456SAndroid Build Coastguard Worker#endif
239*58b9f456SAndroid Build Coastguard Worker
240*58b9f456SAndroid Build Coastguard Worker_LIBCPP_PUSH_MACROS
241*58b9f456SAndroid Build Coastguard Worker#include <__undef_macros>
242*58b9f456SAndroid Build Coastguard Worker
243*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
244*58b9f456SAndroid Build Coastguard Worker
245*58b9f456SAndroid Build Coastguard Worker#define __cpp_lib_experimental_filesystem 201406
246*58b9f456SAndroid Build Coastguard Worker
247*58b9f456SAndroid Build Coastguard Worker_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_FILESYSTEM
248*58b9f456SAndroid Build Coastguard Worker
249*58b9f456SAndroid Build Coastguard Workerusing namespace _VSTD_FS;
250*58b9f456SAndroid Build Coastguard Worker
251*58b9f456SAndroid Build Coastguard Worker_LIBCPP_END_NAMESPACE_EXPERIMENTAL_FILESYSTEM
252*58b9f456SAndroid Build Coastguard Worker
253*58b9f456SAndroid Build Coastguard Worker#endif // !_LIBCPP_CXX03_LANG
254*58b9f456SAndroid Build Coastguard Worker
255*58b9f456SAndroid Build Coastguard Worker_LIBCPP_POP_MACROS
256*58b9f456SAndroid Build Coastguard Worker
257*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_EXPERIMENTAL_FILESYSTEM
258