17c82a1ecSDimitry Andric// -*- C++ -*- 27c82a1ecSDimitry Andric//===--------------------------- filesystem -------------------------------===// 37c82a1ecSDimitry Andric// 47c82a1ecSDimitry Andric// The LLVM Compiler Infrastructure 57c82a1ecSDimitry Andric// 67c82a1ecSDimitry Andric// This file is dual licensed under the MIT and the University of Illinois Open 77c82a1ecSDimitry Andric// Source Licenses. See LICENSE.TXT for details. 87c82a1ecSDimitry Andric// 97c82a1ecSDimitry Andric//===----------------------------------------------------------------------===// 107c82a1ecSDimitry Andric#ifndef _LIBCPP_EXPERIMENTAL_FILESYSTEM 117c82a1ecSDimitry Andric#define _LIBCPP_EXPERIMENTAL_FILESYSTEM 127c82a1ecSDimitry Andric/* 137c82a1ecSDimitry Andric filesystem synopsis 147c82a1ecSDimitry Andric 157c82a1ecSDimitry Andric namespace std { namespace experimental { namespace filesystem { inline namespace v1 { 167c82a1ecSDimitry Andric 177c82a1ecSDimitry Andric class path; 187c82a1ecSDimitry Andric 19*4ba319b5SDimitry Andric void swap(path& lhs, path& rhs) noexcept; 20*4ba319b5SDimitry Andric size_t hash_value(const path& p) noexcept; 217c82a1ecSDimitry Andric 22*4ba319b5SDimitry Andric bool operator==(const path& lhs, const path& rhs) noexcept; 23*4ba319b5SDimitry Andric bool operator!=(const path& lhs, const path& rhs) noexcept; 24*4ba319b5SDimitry Andric bool operator< (const path& lhs, const path& rhs) noexcept; 25*4ba319b5SDimitry Andric bool operator<=(const path& lhs, const path& rhs) noexcept; 26*4ba319b5SDimitry Andric bool operator> (const path& lhs, const path& rhs) noexcept; 27*4ba319b5SDimitry Andric bool operator>=(const path& lhs, const path& rhs) noexcept; 287c82a1ecSDimitry Andric 297c82a1ecSDimitry Andric path operator/ (const path& lhs, const path& rhs); 307c82a1ecSDimitry Andric 31*4ba319b5SDimitry Andric // fs.path.io operators are friends of path. 327c82a1ecSDimitry Andric template <class charT, class traits> 33*4ba319b5SDimitry Andric friend basic_ostream<charT, traits>& 347c82a1ecSDimitry Andric operator<<(basic_ostream<charT, traits>& os, const path& p); 357c82a1ecSDimitry Andric 367c82a1ecSDimitry Andric template <class charT, class traits> 37*4ba319b5SDimitry Andric friend basic_istream<charT, traits>& 387c82a1ecSDimitry Andric operator>>(basic_istream<charT, traits>& is, path& p); 397c82a1ecSDimitry Andric 407c82a1ecSDimitry Andric template <class Source> 417c82a1ecSDimitry Andric path u8path(const Source& source); 427c82a1ecSDimitry Andric template <class InputIterator> 437c82a1ecSDimitry Andric path u8path(InputIterator first, InputIterator last); 447c82a1ecSDimitry Andric 457c82a1ecSDimitry Andric class filesystem_error; 467c82a1ecSDimitry Andric class directory_entry; 477c82a1ecSDimitry Andric 487c82a1ecSDimitry Andric class directory_iterator; 497c82a1ecSDimitry Andric 507c82a1ecSDimitry Andric // enable directory_iterator range-based for statements 517c82a1ecSDimitry Andric directory_iterator begin(directory_iterator iter) noexcept; 527c82a1ecSDimitry Andric directory_iterator end(const directory_iterator&) noexcept; 537c82a1ecSDimitry Andric 547c82a1ecSDimitry Andric class recursive_directory_iterator; 557c82a1ecSDimitry Andric 567c82a1ecSDimitry Andric // enable recursive_directory_iterator range-based for statements 577c82a1ecSDimitry Andric recursive_directory_iterator begin(recursive_directory_iterator iter) noexcept; 587c82a1ecSDimitry Andric recursive_directory_iterator end(const recursive_directory_iterator&) noexcept; 597c82a1ecSDimitry Andric 607c82a1ecSDimitry Andric class file_status; 617c82a1ecSDimitry Andric 627c82a1ecSDimitry Andric struct space_info 637c82a1ecSDimitry Andric { 647c82a1ecSDimitry Andric uintmax_t capacity; 657c82a1ecSDimitry Andric uintmax_t free; 667c82a1ecSDimitry Andric uintmax_t available; 677c82a1ecSDimitry Andric }; 687c82a1ecSDimitry Andric 697c82a1ecSDimitry Andric enum class file_type; 707c82a1ecSDimitry Andric enum class perms; 71*4ba319b5SDimitry Andric enum class perm_options; 727c82a1ecSDimitry Andric enum class copy_options; 737c82a1ecSDimitry Andric enum class directory_options; 747c82a1ecSDimitry Andric 757c82a1ecSDimitry Andric typedef chrono::time_point<trivial-clock> file_time_type; 767c82a1ecSDimitry Andric 777c82a1ecSDimitry Andric // operational functions 787c82a1ecSDimitry Andric 79*4ba319b5SDimitry Andric path absolute(const path& p); 80*4ba319b5SDimitry Andric path absolute(const path& p, error_code &ec); 817c82a1ecSDimitry Andric 82*4ba319b5SDimitry Andric path canonical(const path& p); 837c82a1ecSDimitry Andric path canonical(const path& p, error_code& ec); 847c82a1ecSDimitry Andric 857c82a1ecSDimitry Andric void copy(const path& from, const path& to); 86b2c7081bSDimitry Andric void copy(const path& from, const path& to, error_code& ec); 877c82a1ecSDimitry Andric void copy(const path& from, const path& to, copy_options options); 887c82a1ecSDimitry Andric void copy(const path& from, const path& to, copy_options options, 89b2c7081bSDimitry Andric error_code& ec); 907c82a1ecSDimitry Andric 917c82a1ecSDimitry Andric bool copy_file(const path& from, const path& to); 92*4ba319b5SDimitry Andric bool copy_file(const path& from, const path& to, error_code& ec); 937c82a1ecSDimitry Andric bool copy_file(const path& from, const path& to, copy_options option); 947c82a1ecSDimitry Andric bool copy_file(const path& from, const path& to, copy_options option, 95*4ba319b5SDimitry Andric error_code& ec); 967c82a1ecSDimitry Andric 977c82a1ecSDimitry Andric void copy_symlink(const path& existing_symlink, const path& new_symlink); 987c82a1ecSDimitry Andric void copy_symlink(const path& existing_symlink, const path& new_symlink, 99*4ba319b5SDimitry Andric error_code& ec) noexcept; 1007c82a1ecSDimitry Andric 1017c82a1ecSDimitry Andric bool create_directories(const path& p); 102*4ba319b5SDimitry Andric bool create_directories(const path& p, error_code& ec); 1037c82a1ecSDimitry Andric 1047c82a1ecSDimitry Andric bool create_directory(const path& p); 105*4ba319b5SDimitry Andric bool create_directory(const path& p, error_code& ec) noexcept; 1067c82a1ecSDimitry Andric 1077c82a1ecSDimitry Andric bool create_directory(const path& p, const path& attributes); 1087c82a1ecSDimitry Andric bool create_directory(const path& p, const path& attributes, 109*4ba319b5SDimitry Andric error_code& ec) noexcept; 1107c82a1ecSDimitry Andric 1117c82a1ecSDimitry Andric void create_directory_symlink(const path& to, const path& new_symlink); 1127c82a1ecSDimitry Andric void create_directory_symlink(const path& to, const path& new_symlink, 113*4ba319b5SDimitry Andric error_code& ec) noexcept; 1147c82a1ecSDimitry Andric 1157c82a1ecSDimitry Andric void create_hard_link(const path& to, const path& new_hard_link); 1167c82a1ecSDimitry Andric void create_hard_link(const path& to, const path& new_hard_link, 117*4ba319b5SDimitry Andric error_code& ec) noexcept; 1187c82a1ecSDimitry Andric 1197c82a1ecSDimitry Andric void create_symlink(const path& to, const path& new_symlink); 1207c82a1ecSDimitry Andric void create_symlink(const path& to, const path& new_symlink, 121*4ba319b5SDimitry Andric error_code& ec) noexcept; 1227c82a1ecSDimitry Andric 1237c82a1ecSDimitry Andric path current_path(); 1247c82a1ecSDimitry Andric path current_path(error_code& ec); 1257c82a1ecSDimitry Andric void current_path(const path& p); 126*4ba319b5SDimitry Andric void current_path(const path& p, error_code& ec) noexcept; 1277c82a1ecSDimitry Andric 128*4ba319b5SDimitry Andric bool exists(file_status s) noexcept; 1297c82a1ecSDimitry Andric bool exists(const path& p); 130*4ba319b5SDimitry Andric bool exists(const path& p, error_code& ec) noexcept; 1317c82a1ecSDimitry Andric 1327c82a1ecSDimitry Andric bool equivalent(const path& p1, const path& p2); 133*4ba319b5SDimitry Andric bool equivalent(const path& p1, const path& p2, error_code& ec) noexcept; 1347c82a1ecSDimitry Andric 1357c82a1ecSDimitry Andric uintmax_t file_size(const path& p); 136*4ba319b5SDimitry Andric uintmax_t file_size(const path& p, error_code& ec) noexcept; 1377c82a1ecSDimitry Andric 1387c82a1ecSDimitry Andric uintmax_t hard_link_count(const path& p); 139*4ba319b5SDimitry Andric uintmax_t hard_link_count(const path& p, error_code& ec) noexcept; 1407c82a1ecSDimitry Andric 141*4ba319b5SDimitry Andric bool is_block_file(file_status s) noexcept; 1427c82a1ecSDimitry Andric bool is_block_file(const path& p); 143*4ba319b5SDimitry Andric bool is_block_file(const path& p, error_code& ec) noexcept; 1447c82a1ecSDimitry Andric 145*4ba319b5SDimitry Andric bool is_character_file(file_status s) noexcept; 1467c82a1ecSDimitry Andric bool is_character_file(const path& p); 147*4ba319b5SDimitry Andric bool is_character_file(const path& p, error_code& ec) noexcept; 1487c82a1ecSDimitry Andric 149*4ba319b5SDimitry Andric bool is_directory(file_status s) noexcept; 1507c82a1ecSDimitry Andric bool is_directory(const path& p); 151*4ba319b5SDimitry Andric bool is_directory(const path& p, error_code& ec) noexcept; 1527c82a1ecSDimitry Andric 1537c82a1ecSDimitry Andric bool is_empty(const path& p); 154*4ba319b5SDimitry Andric bool is_empty(const path& p, error_code& ec) noexcept; 1557c82a1ecSDimitry Andric 156*4ba319b5SDimitry Andric bool is_fifo(file_status s) noexcept; 1577c82a1ecSDimitry Andric bool is_fifo(const path& p); 158*4ba319b5SDimitry Andric bool is_fifo(const path& p, error_code& ec) noexcept; 1597c82a1ecSDimitry Andric 160*4ba319b5SDimitry Andric bool is_other(file_status s) noexcept; 1617c82a1ecSDimitry Andric bool is_other(const path& p); 162*4ba319b5SDimitry Andric bool is_other(const path& p, error_code& ec) noexcept; 1637c82a1ecSDimitry Andric 164*4ba319b5SDimitry Andric bool is_regular_file(file_status s) noexcept; 1657c82a1ecSDimitry Andric bool is_regular_file(const path& p); 166*4ba319b5SDimitry Andric bool is_regular_file(const path& p, error_code& ec) noexcept; 1677c82a1ecSDimitry Andric 168*4ba319b5SDimitry Andric bool is_socket(file_status s) noexcept; 1697c82a1ecSDimitry Andric bool is_socket(const path& p); 170*4ba319b5SDimitry Andric bool is_socket(const path& p, error_code& ec) noexcept; 1717c82a1ecSDimitry Andric 172*4ba319b5SDimitry Andric bool is_symlink(file_status s) noexcept; 1737c82a1ecSDimitry Andric bool is_symlink(const path& p); 174*4ba319b5SDimitry Andric bool is_symlink(const path& p, error_code& ec) noexcept; 1757c82a1ecSDimitry Andric 1767c82a1ecSDimitry Andric file_time_type last_write_time(const path& p); 177*4ba319b5SDimitry Andric file_time_type last_write_time(const path& p, error_code& ec) noexcept; 1787c82a1ecSDimitry Andric void last_write_time(const path& p, file_time_type new_time); 1797c82a1ecSDimitry Andric void last_write_time(const path& p, file_time_type new_time, 180*4ba319b5SDimitry Andric error_code& ec) noexcept; 1817c82a1ecSDimitry Andric 182*4ba319b5SDimitry Andric void permissions(const path& p, perms prms, 183*4ba319b5SDimitry Andric perm_options opts=perm_options::replace); 184*4ba319b5SDimitry Andric void permissions(const path& p, perms prms, error_code& ec) noexcept; 185*4ba319b5SDimitry Andric void permissions(const path& p, perms prms, perm_options opts, 186*4ba319b5SDimitry Andric error_code& ec); 187*4ba319b5SDimitry Andric 188*4ba319b5SDimitry Andric path proximate(const path& p, error_code& ec); 189*4ba319b5SDimitry Andric path proximate(const path& p, const path& base = current_path()); 190*4ba319b5SDimitry Andric path proximate(const path& p, const path& base, error_code &ec); 1917c82a1ecSDimitry Andric 1927c82a1ecSDimitry Andric path read_symlink(const path& p); 1937c82a1ecSDimitry Andric path read_symlink(const path& p, error_code& ec); 1947c82a1ecSDimitry Andric 195*4ba319b5SDimitry Andric path relative(const path& p, error_code& ec); 196*4ba319b5SDimitry Andric path relative(const path& p, const path& base=current_path()); 197*4ba319b5SDimitry Andric path relative(const path& p, const path& base, error_code& ec); 198*4ba319b5SDimitry Andric 1997c82a1ecSDimitry Andric bool remove(const path& p); 200*4ba319b5SDimitry Andric bool remove(const path& p, error_code& ec) noexcept; 2017c82a1ecSDimitry Andric 2027c82a1ecSDimitry Andric uintmax_t remove_all(const path& p); 203*4ba319b5SDimitry Andric uintmax_t remove_all(const path& p, error_code& ec); 2047c82a1ecSDimitry Andric 2057c82a1ecSDimitry Andric void rename(const path& from, const path& to); 206*4ba319b5SDimitry Andric void rename(const path& from, const path& to, error_code& ec) noexcept; 2077c82a1ecSDimitry Andric 2087c82a1ecSDimitry Andric void resize_file(const path& p, uintmax_t size); 209*4ba319b5SDimitry Andric void resize_file(const path& p, uintmax_t size, error_code& ec) noexcept; 2107c82a1ecSDimitry Andric 2117c82a1ecSDimitry Andric space_info space(const path& p); 212*4ba319b5SDimitry Andric space_info space(const path& p, error_code& ec) noexcept; 2137c82a1ecSDimitry Andric 2147c82a1ecSDimitry Andric file_status status(const path& p); 215*4ba319b5SDimitry Andric file_status status(const path& p, error_code& ec) noexcept; 2167c82a1ecSDimitry Andric 217*4ba319b5SDimitry Andric bool status_known(file_status s) noexcept; 2187c82a1ecSDimitry Andric 2197c82a1ecSDimitry Andric file_status symlink_status(const path& p); 220*4ba319b5SDimitry Andric file_status symlink_status(const path& p, error_code& ec) noexcept; 2217c82a1ecSDimitry Andric 2227c82a1ecSDimitry Andric path temp_directory_path(); 2237c82a1ecSDimitry Andric path temp_directory_path(error_code& ec); 2247c82a1ecSDimitry Andric 225*4ba319b5SDimitry Andric path weakly_canonical(path const& p); 226*4ba319b5SDimitry Andric path weakly_canonical(path const& p, error_code& ec); 227*4ba319b5SDimitry Andric 228*4ba319b5SDimitry Andric 2297c82a1ecSDimitry Andric} } } } // namespaces std::experimental::filesystem::v1 2307c82a1ecSDimitry Andric 2317c82a1ecSDimitry Andric*/ 2327c82a1ecSDimitry Andric 2337c82a1ecSDimitry Andric#include <experimental/__config> 234*4ba319b5SDimitry Andric#include <filesystem> 2357c82a1ecSDimitry Andric 2367c82a1ecSDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 2377c82a1ecSDimitry Andric#pragma GCC system_header 2387c82a1ecSDimitry Andric#endif 2397c82a1ecSDimitry Andric 240*4ba319b5SDimitry Andric_LIBCPP_PUSH_MACROS 241*4ba319b5SDimitry Andric#include <__undef_macros> 242*4ba319b5SDimitry Andric 243*4ba319b5SDimitry Andric#ifndef _LIBCPP_CXX03_LANG 244*4ba319b5SDimitry Andric 2457c82a1ecSDimitry Andric#define __cpp_lib_experimental_filesystem 201406 2467c82a1ecSDimitry Andric 2477c82a1ecSDimitry Andric_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_FILESYSTEM 2487c82a1ecSDimitry Andric 249*4ba319b5SDimitry Andricusing namespace _VSTD_FS; 2507c82a1ecSDimitry Andric 2517c82a1ecSDimitry Andric_LIBCPP_END_NAMESPACE_EXPERIMENTAL_FILESYSTEM 2527c82a1ecSDimitry Andric 253*4ba319b5SDimitry Andric#endif // !_LIBCPP_CXX03_LANG 254*4ba319b5SDimitry Andric 255*4ba319b5SDimitry Andric_LIBCPP_POP_MACROS 256*4ba319b5SDimitry Andric 2577c82a1ecSDimitry Andric#endif // _LIBCPP_EXPERIMENTAL_FILESYSTEM 258