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