Author: ericwf Date: Mon Apr 2 16:35:24 2018 New Revision: 329031 URL: http://llvm.org/viewvc/llvm-project?rev=329031&view=rev Log: Implement P0430R2 - File system library on non-POSIX systems.
This patch implements P0430R2, who's largest change is adding the path::format enumeration for supporting path format conversions in path constructors. However, since libc++'s filesystem only really supports POSIX like systems, there are no real changes needed. This patch simply adds the format enum and then ignores it when it's passed to constructors. Added: libcxx/trunk/test/std/experimental/filesystem/fs.enum/enum.path.format.pass.cpp Modified: libcxx/trunk/include/experimental/filesystem libcxx/trunk/test/std/experimental/filesystem/class.path/path.member/path.construct/source.pass.cpp libcxx/trunk/www/cxx1z_status.html Modified: libcxx/trunk/include/experimental/filesystem URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/experimental/filesystem?rev=329031&r1=329030&r2=329031&view=diff ============================================================================== --- libcxx/trunk/include/experimental/filesystem (original) +++ libcxx/trunk/include/experimental/filesystem Mon Apr 2 16:35:24 2018 @@ -721,24 +721,31 @@ public: typedef _VSTD::string_view __string_view; static _LIBCPP_CONSTEXPR value_type preferred_separator = '/'; + enum class _LIBCPP_ENUM_VIS format : unsigned char { + auto_format, + native_format, + generic_format + }; + // constructors and destructor _LIBCPP_INLINE_VISIBILITY path() _NOEXCEPT {} _LIBCPP_INLINE_VISIBILITY path(const path& __p) : __pn_(__p.__pn_) {} _LIBCPP_INLINE_VISIBILITY path(path&& __p) _NOEXCEPT : __pn_(_VSTD::move(__p.__pn_)) {} _LIBCPP_INLINE_VISIBILITY - path(string_type&& __s) _NOEXCEPT : __pn_(_VSTD::move(__s)) {} + path(string_type&& __s, format = format::auto_format) _NOEXCEPT + : __pn_(_VSTD::move(__s)) {} template < class _Source, class = _EnableIfPathable<_Source, void> > - path(const _Source& __src) { + path(const _Source& __src, format = format::auto_format) { _SourceCVT<_Source>::__append_source(__pn_, __src); } template <class _InputIt> - path(_InputIt __first, _InputIt __last) { + path(_InputIt __first, _InputIt __last, format = format::auto_format) { typedef typename iterator_traits<_InputIt>::value_type _ItVal; _PathCVT<_ItVal>::__append_range(__pn_, __first, __last); } @@ -747,9 +754,11 @@ public: template <class _Source, class = _EnableIfPathable<_Source, void> > - path(const _Source& __src, const locale& __loc); + path(const _Source& __src, const locale& __loc, + format = format::auto_format); template <class _InputIt> - path(_InputIt __first, _InputIt _last, const locale& __loc); + path(_InputIt __first, _InputIt _last, const locale& __loc, + format = format::auto_format); _LIBCPP_INLINE_VISIBILITY ~path() = default; Modified: libcxx/trunk/test/std/experimental/filesystem/class.path/path.member/path.construct/source.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/filesystem/class.path/path.member/path.construct/source.pass.cpp?rev=329031&r1=329030&r2=329031&view=diff ============================================================================== --- libcxx/trunk/test/std/experimental/filesystem/class.path/path.member/path.construct/source.pass.cpp (original) +++ libcxx/trunk/test/std/experimental/filesystem/class.path/path.member/path.construct/source.pass.cpp Mon Apr 2 16:35:24 2018 @@ -29,8 +29,8 @@ #include "filesystem_test_helper.hpp" -template <class CharT> -void RunTestCase(MultiStringType const& MS) { +template <class CharT, class ...Args> +void RunTestCaseImpl(MultiStringType const& MS, Args... args) { using namespace fs; const char* Expect = MS; const CharT* TestPath = MS; @@ -41,44 +41,52 @@ void RunTestCase(MultiStringType const& // StringTypes { const std::basic_string<CharT> S(TestPath); - path p(S); + path p(S, args...); assert(p.native() == Expect); assert(p.string<CharT>() == TestPath); assert(p.string<CharT>() == S); } { const std::basic_string_view<CharT> S(TestPath); - path p(S); + path p(S, args...); assert(p.native() == Expect); assert(p.string<CharT>() == TestPath); assert(p.string<CharT>() == S); } // Char* pointers { - path p(TestPath); + path p(TestPath, args...); assert(p.native() == Expect); assert(p.string<CharT>() == TestPath); } { - path p(TestPath, TestPathEnd); + path p(TestPath, TestPathEnd, args...); assert(p.native() == Expect); assert(p.string<CharT>() == TestPath); } // Iterators { using It = input_iterator<const CharT*>; - path p(It{TestPath}); + path p(It{TestPath}, args...); assert(p.native() == Expect); assert(p.string<CharT>() == TestPath); } { using It = input_iterator<const CharT*>; - path p(It{TestPath}, It{TestPathEnd}); + path p(It{TestPath}, It{TestPathEnd}, args...); assert(p.native() == Expect); assert(p.string<CharT>() == TestPath); } } +template <class CharT, class ...Args> +void RunTestCase(MultiStringType const& MS) { + RunTestCaseImpl<CharT>(MS); + RunTestCaseImpl<CharT>(MS, fs::path::format::auto_format); + RunTestCaseImpl<CharT>(MS, fs::path::format::native_format); + RunTestCaseImpl<CharT>(MS, fs::path::format::generic_format); +} + void test_sfinae() { using namespace fs; { Added: libcxx/trunk/test/std/experimental/filesystem/fs.enum/enum.path.format.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/filesystem/fs.enum/enum.path.format.pass.cpp?rev=329031&view=auto ============================================================================== --- libcxx/trunk/test/std/experimental/filesystem/fs.enum/enum.path.format.pass.cpp (added) +++ libcxx/trunk/test/std/experimental/filesystem/fs.enum/enum.path.format.pass.cpp Mon Apr 2 16:35:24 2018 @@ -0,0 +1,38 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03 + +// <experimental/filesystem> + +// class path; +// enum class format; + +#include "filesystem_include.hpp" +#include <type_traits> +#include <cassert> + +#include "test_macros.h" + +int main() { + typedef fs::path::format E; + static_assert(std::is_enum<E>::value, ""); + + // Check that E is a scoped enum by checking for conversions. + typedef std::underlying_type<E>::type UT; + static_assert(!std::is_convertible<E, UT>::value, ""); + + LIBCPP_ONLY(static_assert(std::is_same<UT, unsigned char>::value, "")); // Implementation detail + + static_assert( + E::auto_format != E::native_format && + E::auto_format != E::generic_format && + E::native_format != E::generic_format, + "Expected enumeration values are not unique"); +} Modified: libcxx/trunk/www/cxx1z_status.html URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/www/cxx1z_status.html?rev=329031&r1=329030&r2=329031&view=diff ============================================================================== --- libcxx/trunk/www/cxx1z_status.html (original) +++ libcxx/trunk/www/cxx1z_status.html Mon Apr 2 16:35:24 2018 @@ -149,7 +149,7 @@ <tr><td><a href="https://wg21.link/P0270R3">P0270R3</a></td><td>CWG</td><td>Removing C dependencies from signal handler wording</td><td>Kona</td><td></td><td></td></tr> <tr><td><a href="https://wg21.link/P0298R3">P0298R3</a></td><td>CWG</td><td>A byte type definition</td><td>Kona</td><td>Complete</td><td>5.0</td></tr> <tr><td><a href="https://wg21.link/P0317R1">P0317R1</a></td><td>LWG</td><td>Directory Entry Caching for Filesystem</td><td>Kona</td><td></td><td></td></tr> - <tr><td><a href="https://wg21.link/P0430R2">P0430R2</a></td><td>LWG</td><td>File system library on non-POSIX-like operating systems</td><td>Kona</td><td></td><td></td></tr> + <tr><td><a href="https://wg21.link/P0430R2">P0430R2</a></td><td>LWG</td><td>File system library on non-POSIX-like operating systems</td><td>Kona</td><td>Complete</td><td>7.0</td></tr> <tr><td><a href="https://wg21.link/P0433R2">P0433R2</a></td><td>LWG</td><td>Toward a resolution of US7 and US14: Integrating template deduction for class templates into the standard library</td><td>Kona</td><td><i>In progress</i></td><td>7.0</td></tr> <tr><td><a href="https://wg21.link/P0452R1">P0452R1</a></td><td>LWG</td><td>Unifying <numeric> Parallel Algorithms</td><td>Kona</td><td></td><td></td></tr> <tr><td><a href="https://wg21.link/P0467R2">P0467R2</a></td><td>LWG</td><td>Iterator Concerns for Parallel Algorithms</td><td>Kona</td><td></td><td></td></tr> _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits