1303237Sdim// -*- C++ -*- 2303237Sdim//===--------------------------- filesystem -------------------------------===// 3303237Sdim// 4353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5353358Sdim// See https://llvm.org/LICENSE.txt for license information. 6353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7303237Sdim// 8303237Sdim//===----------------------------------------------------------------------===// 9303237Sdim#ifndef _LIBCPP_EXPERIMENTAL_FILESYSTEM 10303237Sdim#define _LIBCPP_EXPERIMENTAL_FILESYSTEM 11303237Sdim/* 12303237Sdim filesystem synopsis 13303237Sdim 14303237Sdim namespace std { namespace experimental { namespace filesystem { inline namespace v1 { 15303237Sdim 16303237Sdim class path; 17303237Sdim 18341825Sdim void swap(path& lhs, path& rhs) noexcept; 19341825Sdim size_t hash_value(const path& p) noexcept; 20303237Sdim 21341825Sdim bool operator==(const path& lhs, const path& rhs) noexcept; 22341825Sdim bool operator!=(const path& lhs, const path& rhs) noexcept; 23341825Sdim bool operator< (const path& lhs, const path& rhs) noexcept; 24341825Sdim bool operator<=(const path& lhs, const path& rhs) noexcept; 25341825Sdim bool operator> (const path& lhs, const path& rhs) noexcept; 26341825Sdim bool operator>=(const path& lhs, const path& rhs) noexcept; 27303237Sdim 28303237Sdim path operator/ (const path& lhs, const path& rhs); 29303237Sdim 30341825Sdim // fs.path.io operators are friends of path. 31303237Sdim template <class charT, class traits> 32341825Sdim friend basic_ostream<charT, traits>& 33303237Sdim operator<<(basic_ostream<charT, traits>& os, const path& p); 34303237Sdim 35303237Sdim template <class charT, class traits> 36341825Sdim friend basic_istream<charT, traits>& 37303237Sdim operator>>(basic_istream<charT, traits>& is, path& p); 38303237Sdim 39303237Sdim template <class Source> 40303237Sdim path u8path(const Source& source); 41303237Sdim template <class InputIterator> 42303237Sdim path u8path(InputIterator first, InputIterator last); 43303237Sdim 44303237Sdim class filesystem_error; 45303237Sdim class directory_entry; 46303237Sdim 47303237Sdim class directory_iterator; 48303237Sdim 49303237Sdim // enable directory_iterator range-based for statements 50303237Sdim directory_iterator begin(directory_iterator iter) noexcept; 51303237Sdim directory_iterator end(const directory_iterator&) noexcept; 52303237Sdim 53303237Sdim class recursive_directory_iterator; 54303237Sdim 55303237Sdim // enable recursive_directory_iterator range-based for statements 56303237Sdim recursive_directory_iterator begin(recursive_directory_iterator iter) noexcept; 57303237Sdim recursive_directory_iterator end(const recursive_directory_iterator&) noexcept; 58303237Sdim 59303237Sdim class file_status; 60303237Sdim 61303237Sdim struct space_info 62303237Sdim { 63303237Sdim uintmax_t capacity; 64303237Sdim uintmax_t free; 65303237Sdim uintmax_t available; 66303237Sdim }; 67303237Sdim 68303237Sdim enum class file_type; 69303237Sdim enum class perms; 70341825Sdim enum class perm_options; 71303237Sdim enum class copy_options; 72303237Sdim enum class directory_options; 73303237Sdim 74303237Sdim typedef chrono::time_point<trivial-clock> file_time_type; 75303237Sdim 76303237Sdim // operational functions 77303237Sdim 78341825Sdim path absolute(const path& p); 79341825Sdim path absolute(const path& p, error_code &ec); 80303237Sdim 81341825Sdim path canonical(const path& p); 82303237Sdim path canonical(const path& p, error_code& ec); 83303237Sdim 84303237Sdim void copy(const path& from, const path& to); 85327952Sdim void copy(const path& from, const path& to, error_code& ec); 86303237Sdim void copy(const path& from, const path& to, copy_options options); 87303237Sdim void copy(const path& from, const path& to, copy_options options, 88327952Sdim error_code& ec); 89303237Sdim 90303237Sdim bool copy_file(const path& from, const path& to); 91341825Sdim bool copy_file(const path& from, const path& to, error_code& ec); 92303237Sdim bool copy_file(const path& from, const path& to, copy_options option); 93303237Sdim bool copy_file(const path& from, const path& to, copy_options option, 94341825Sdim error_code& ec); 95303237Sdim 96303237Sdim void copy_symlink(const path& existing_symlink, const path& new_symlink); 97303237Sdim void copy_symlink(const path& existing_symlink, const path& new_symlink, 98341825Sdim error_code& ec) noexcept; 99303237Sdim 100303237Sdim bool create_directories(const path& p); 101341825Sdim bool create_directories(const path& p, error_code& ec); 102303237Sdim 103303237Sdim bool create_directory(const path& p); 104341825Sdim bool create_directory(const path& p, error_code& ec) noexcept; 105303237Sdim 106303237Sdim bool create_directory(const path& p, const path& attributes); 107303237Sdim bool create_directory(const path& p, const path& attributes, 108341825Sdim error_code& ec) noexcept; 109303237Sdim 110303237Sdim void create_directory_symlink(const path& to, const path& new_symlink); 111303237Sdim void create_directory_symlink(const path& to, const path& new_symlink, 112341825Sdim error_code& ec) noexcept; 113303237Sdim 114303237Sdim void create_hard_link(const path& to, const path& new_hard_link); 115303237Sdim void create_hard_link(const path& to, const path& new_hard_link, 116341825Sdim error_code& ec) noexcept; 117303237Sdim 118303237Sdim void create_symlink(const path& to, const path& new_symlink); 119303237Sdim void create_symlink(const path& to, const path& new_symlink, 120341825Sdim error_code& ec) noexcept; 121303237Sdim 122303237Sdim path current_path(); 123303237Sdim path current_path(error_code& ec); 124303237Sdim void current_path(const path& p); 125341825Sdim void current_path(const path& p, error_code& ec) noexcept; 126303237Sdim 127341825Sdim bool exists(file_status s) noexcept; 128303237Sdim bool exists(const path& p); 129341825Sdim bool exists(const path& p, error_code& ec) noexcept; 130303237Sdim 131303237Sdim bool equivalent(const path& p1, const path& p2); 132341825Sdim bool equivalent(const path& p1, const path& p2, error_code& ec) noexcept; 133303237Sdim 134303237Sdim uintmax_t file_size(const path& p); 135341825Sdim uintmax_t file_size(const path& p, error_code& ec) noexcept; 136303237Sdim 137303237Sdim uintmax_t hard_link_count(const path& p); 138341825Sdim uintmax_t hard_link_count(const path& p, error_code& ec) noexcept; 139303237Sdim 140341825Sdim bool is_block_file(file_status s) noexcept; 141303237Sdim bool is_block_file(const path& p); 142341825Sdim bool is_block_file(const path& p, error_code& ec) noexcept; 143303237Sdim 144341825Sdim bool is_character_file(file_status s) noexcept; 145303237Sdim bool is_character_file(const path& p); 146341825Sdim bool is_character_file(const path& p, error_code& ec) noexcept; 147303237Sdim 148341825Sdim bool is_directory(file_status s) noexcept; 149303237Sdim bool is_directory(const path& p); 150341825Sdim bool is_directory(const path& p, error_code& ec) noexcept; 151303237Sdim 152303237Sdim bool is_empty(const path& p); 153341825Sdim bool is_empty(const path& p, error_code& ec) noexcept; 154303237Sdim 155341825Sdim bool is_fifo(file_status s) noexcept; 156303237Sdim bool is_fifo(const path& p); 157341825Sdim bool is_fifo(const path& p, error_code& ec) noexcept; 158303237Sdim 159341825Sdim bool is_other(file_status s) noexcept; 160303237Sdim bool is_other(const path& p); 161341825Sdim bool is_other(const path& p, error_code& ec) noexcept; 162303237Sdim 163341825Sdim bool is_regular_file(file_status s) noexcept; 164303237Sdim bool is_regular_file(const path& p); 165341825Sdim bool is_regular_file(const path& p, error_code& ec) noexcept; 166303237Sdim 167341825Sdim bool is_socket(file_status s) noexcept; 168303237Sdim bool is_socket(const path& p); 169341825Sdim bool is_socket(const path& p, error_code& ec) noexcept; 170303237Sdim 171341825Sdim bool is_symlink(file_status s) noexcept; 172303237Sdim bool is_symlink(const path& p); 173341825Sdim bool is_symlink(const path& p, error_code& ec) noexcept; 174303237Sdim 175303237Sdim file_time_type last_write_time(const path& p); 176341825Sdim file_time_type last_write_time(const path& p, error_code& ec) noexcept; 177303237Sdim void last_write_time(const path& p, file_time_type new_time); 178303237Sdim void last_write_time(const path& p, file_time_type new_time, 179341825Sdim error_code& ec) noexcept; 180303237Sdim 181341825Sdim void permissions(const path& p, perms prms, 182341825Sdim perm_options opts=perm_options::replace); 183341825Sdim void permissions(const path& p, perms prms, error_code& ec) noexcept; 184341825Sdim void permissions(const path& p, perms prms, perm_options opts, 185341825Sdim error_code& ec); 186303237Sdim 187341825Sdim path proximate(const path& p, error_code& ec); 188341825Sdim path proximate(const path& p, const path& base = current_path()); 189341825Sdim path proximate(const path& p, const path& base, error_code &ec); 190341825Sdim 191303237Sdim path read_symlink(const path& p); 192303237Sdim path read_symlink(const path& p, error_code& ec); 193303237Sdim 194341825Sdim path relative(const path& p, error_code& ec); 195341825Sdim path relative(const path& p, const path& base=current_path()); 196341825Sdim path relative(const path& p, const path& base, error_code& ec); 197341825Sdim 198303237Sdim bool remove(const path& p); 199341825Sdim bool remove(const path& p, error_code& ec) noexcept; 200303237Sdim 201303237Sdim uintmax_t remove_all(const path& p); 202341825Sdim uintmax_t remove_all(const path& p, error_code& ec); 203303237Sdim 204303237Sdim void rename(const path& from, const path& to); 205341825Sdim void rename(const path& from, const path& to, error_code& ec) noexcept; 206303237Sdim 207303237Sdim void resize_file(const path& p, uintmax_t size); 208341825Sdim void resize_file(const path& p, uintmax_t size, error_code& ec) noexcept; 209303237Sdim 210303237Sdim space_info space(const path& p); 211341825Sdim space_info space(const path& p, error_code& ec) noexcept; 212303237Sdim 213303237Sdim file_status status(const path& p); 214341825Sdim file_status status(const path& p, error_code& ec) noexcept; 215303237Sdim 216341825Sdim bool status_known(file_status s) noexcept; 217303237Sdim 218303237Sdim file_status symlink_status(const path& p); 219341825Sdim file_status symlink_status(const path& p, error_code& ec) noexcept; 220303237Sdim 221303237Sdim path temp_directory_path(); 222303237Sdim path temp_directory_path(error_code& ec); 223303237Sdim 224341825Sdim path weakly_canonical(path const& p); 225341825Sdim path weakly_canonical(path const& p, error_code& ec); 226341825Sdim 227341825Sdim 228303237Sdim} } } } // namespaces std::experimental::filesystem::v1 229303237Sdim 230303237Sdim*/ 231303237Sdim 232303237Sdim#include <experimental/__config> 233341825Sdim#include <filesystem> 234303237Sdim 235303237Sdim#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 236303237Sdim#pragma GCC system_header 237303237Sdim#endif 238303237Sdim 239341825Sdim_LIBCPP_PUSH_MACROS 240341825Sdim#include <__undef_macros> 241341825Sdim 242341825Sdim#ifndef _LIBCPP_CXX03_LANG 243341825Sdim 244303237Sdim#define __cpp_lib_experimental_filesystem 201406 245303237Sdim 246303237Sdim_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_FILESYSTEM 247303237Sdim 248341825Sdimusing namespace _VSTD_FS; 249303237Sdim 250341825Sdim_LIBCPP_END_NAMESPACE_EXPERIMENTAL_FILESYSTEM 251303237Sdim 252341825Sdim#endif // !_LIBCPP_CXX03_LANG 253303237Sdim 254341825Sdim_LIBCPP_POP_MACROS 255303237Sdim 256303237Sdim#endif // _LIBCPP_EXPERIMENTAL_FILESYSTEM 257