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