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