Home | History | Annotate | Line # | Download | only in experimental
      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