| @@ -9,6 +9,9 @@ Option ( ASYNCPP_INSTALL_PACKAGE | |||||
| Option ( ASYNCPP_USE_GIT_VERSION | Option ( ASYNCPP_USE_GIT_VERSION | ||||
| "Read the git tags to get the version of asyncpp" | "Read the git tags to get the version of asyncpp" | ||||
| ON ) | ON ) | ||||
| Option ( ASYNCPP_FEATURE_TIMING_ENABLED | |||||
| Option ( ASYNCPP_ENABLE_FEATURE_FS | |||||
| "Enable the file system features of asyncpp" | |||||
| ON ) | |||||
| Option ( ASYNCPP_ENABLE_FEATURE_TIMING | |||||
| "Enable the timing features of asyncpp" | "Enable the timing features of asyncpp" | ||||
| ON ) | ON ) | ||||
| @@ -1,3 +1,4 @@ | |||||
| #pragma once | #pragma once | ||||
| #cmakedefine ASYNCPP_FEATURE_TIMING_ENABLED | |||||
| #cmakedefine ASYNCPP_ENABLE_FEATURE_FS | |||||
| #cmakedefine ASYNCPP_ENABLE_FEATURE_TIMING | |||||
| @@ -4,6 +4,10 @@ | |||||
| #include <asyncpp/core.h> | #include <asyncpp/core.h> | ||||
| #ifdef ASYNCPP_FEATURE_TIMING_ENABLED | |||||
| #ifdef ASYNCPP_ENABLE_FEATURE_FS | |||||
| #include <asyncpp/fs.h> | |||||
| #endif | |||||
| #ifdef ASYNCPP_ENABLE_FEATURE_TIMING | |||||
| #include <asyncpp/timing.h> | #include <asyncpp/timing.h> | ||||
| #endif | #endif | ||||
| @@ -6,6 +6,6 @@ | |||||
| #include "future/lazy.inl" | #include "future/lazy.inl" | ||||
| #include "future/and_then.inl" | #include "future/and_then.inl" | ||||
| #ifdef ASYNCPP_FEATURE_TIMING_ENABLED | |||||
| #ifdef ASYNCPP_ENABLE_FEATURE_TIMING | |||||
| #include "future/timeout.inl" | #include "future/timeout.inl" | ||||
| #endif | #endif | ||||
| @@ -57,7 +57,7 @@ namespace asyncpp | |||||
| typename X_lambda> | typename X_lambda> | ||||
| inline auto and_then(X_lambda&& p_lambda) &&; | inline auto and_then(X_lambda&& p_lambda) &&; | ||||
| #ifdef ASYNCPP_FEATURE_TIMING_ENABLED | |||||
| #ifdef ASYNCPP_ENABLE_FEATURE_TIMING | |||||
| public: | public: | ||||
| /** | /** | ||||
| * @brief Throw an execption if the timeout has passed. | * @brief Throw an execption if the timeout has passed. | ||||
| @@ -6,6 +6,6 @@ | |||||
| #include "stream/flatten.inl" | #include "stream/flatten.inl" | ||||
| #include "stream/for_each.inl" | #include "stream/for_each.inl" | ||||
| #ifdef ASYNCPP_FEATURE_TIMING_ENABLED | |||||
| #ifdef ASYNCPP_ENABLE_FEATURE_TIMING | |||||
| #include "stream/timeout.inl" | #include "stream/timeout.inl" | ||||
| #endif | #endif | ||||
| @@ -75,7 +75,7 @@ namespace asyncpp | |||||
| chaining_mode X_mode = move> | chaining_mode X_mode = move> | ||||
| inline auto flatten() &&; | inline auto flatten() &&; | ||||
| #ifdef ASYNCPP_FEATURE_TIMING_ENABLED | |||||
| #ifdef ASYNCPP_ENABLE_FEATURE_TIMING | |||||
| public: | public: | ||||
| /** | /** | ||||
| * @brief Throw an execption if the timeout has passed. | * @brief Throw an execption if the timeout has passed. | ||||
| @@ -1,5 +1,3 @@ | |||||
| #pragma once | #pragma once | ||||
| #include "fs/directory.h" | #include "fs/directory.h" | ||||
| #include "fs/directory.inl" | |||||
| @@ -1,42 +1,11 @@ | |||||
| #pragma once | #pragma once | ||||
| #include <string> | |||||
| #include <cppfs/path.h> | |||||
| #include <asyncpp/core/stream/stream.pre.h> | |||||
| namespace asyncpp { | |||||
| namespace fs { | |||||
| /** | |||||
| * @brief Create future to read the content of a directory. | |||||
| */ | |||||
| inline auto read_dir(const cppfs::path& p_path); | |||||
| /** | |||||
| * @brief Create future to read the content of a directory including the subdirectories. | |||||
| */ | |||||
| inline auto read_dir_all(const cppfs::path& p_path); | |||||
| /** | |||||
| * @brief Create a new future to create a directory. | |||||
| */ | |||||
| inline auto create_dir(const cppfs::path& p_path); | |||||
| /** | |||||
| * @brief Create a new future to create a directory and all it's parent directories. | |||||
| */ | |||||
| inline auto create_dir_all(const cppfs::path& p_path); | |||||
| /** | |||||
| * @brief Create a new future to remove an empty directory. | |||||
| */ | |||||
| inline auto remove_dir(const cppfs::path& p_path); | |||||
| /** | |||||
| * @brief Create a new future to remove a directory and all it's content. | |||||
| */ | |||||
| inline auto remove_dir_all(const cppfs::path& p_path); | |||||
| } } | |||||
| #include "directory/directory.h" | |||||
| #include "directory/directory.inl" | |||||
| #include "directory/create.inl" | |||||
| #include "directory/create_all.inl" | |||||
| #include "directory/read.inl" | |||||
| #include "directory/read_all.inl" | |||||
| #include "directory/remove.inl" | |||||
| #include "directory/remove_all.inl" | |||||
| @@ -1,167 +0,0 @@ | |||||
| #pragma once | |||||
| #include <vector> | |||||
| #include <cppfs/directory.h> | |||||
| #include "directory.h" | |||||
| namespace asyncpp { | |||||
| namespace fs { | |||||
| namespace __impl | |||||
| { | |||||
| struct read_dir_impl | |||||
| : public base_stream< | |||||
| cppfs::directory::entry, | |||||
| read_dir_impl> | |||||
| { | |||||
| public: | |||||
| using value_type = cppfs::directory::entry; | |||||
| using this_type = read_dir_impl; | |||||
| using base_future_type = base_stream<value_type, this_type>; | |||||
| using result_type = typename base_future_type::result_type; | |||||
| private: | |||||
| cppfs::directory::iterator _it; | |||||
| cppfs::directory::iterator _end; | |||||
| public: | |||||
| inline read_dir_impl( | |||||
| const cppfs::path& p_path) | |||||
| { | |||||
| cppfs::directory d(p_path); | |||||
| if (d.exists()) | |||||
| { | |||||
| _it = d.begin(); | |||||
| _end = d.end(); | |||||
| } | |||||
| } | |||||
| public: | |||||
| inline result_type poll() | |||||
| { | |||||
| if (_it == _end) | |||||
| return result_type::done(); | |||||
| auto ret = result_type::ready(*_it); | |||||
| ++_it; | |||||
| return ret; | |||||
| } | |||||
| }; | |||||
| struct read_dir_all_impl | |||||
| : public base_stream< | |||||
| cppfs::directory::entry, | |||||
| read_dir_all_impl> | |||||
| { | |||||
| public: | |||||
| using value_type = cppfs::directory::entry; | |||||
| using this_type = read_dir_impl; | |||||
| using base_future_type = base_stream<value_type, this_type>; | |||||
| using result_type = typename base_future_type::result_type; | |||||
| private: | |||||
| struct entry | |||||
| { | |||||
| cppfs::directory::iterator it; | |||||
| cppfs::directory::iterator end; | |||||
| }; | |||||
| using entry_stack = std::vector<entry>; | |||||
| entry_stack _stack; | |||||
| public: | |||||
| inline read_dir_all_impl( | |||||
| const cppfs::path& p_path) | |||||
| { | |||||
| cppfs::directory d(p_path); | |||||
| if (d.exists()) | |||||
| { | |||||
| _stack.emplace_back(entry { | |||||
| d.begin(), | |||||
| d.end() | |||||
| }); | |||||
| } | |||||
| } | |||||
| public: | |||||
| inline result_type poll() | |||||
| { | |||||
| while (true) | |||||
| { | |||||
| if (_stack.empty()) | |||||
| return result_type::done(); | |||||
| auto& e = _stack.back(); | |||||
| if (e.it == e.end) | |||||
| { | |||||
| _stack.pop_back(); | |||||
| continue; | |||||
| } | |||||
| auto ret = result_type::ready(std::move(*e.it)); | |||||
| cppfs::directory d(e.it->path); | |||||
| ++e.it; | |||||
| if (d.exists()) | |||||
| { | |||||
| _stack.emplace_back(entry { | |||||
| d.begin(), | |||||
| d.end(), | |||||
| }); | |||||
| } | |||||
| return ret; | |||||
| } | |||||
| } | |||||
| }; | |||||
| } | |||||
| auto read_dir(const cppfs::path& p_path) | |||||
| { | |||||
| return __impl::read_dir_impl(p_path); | |||||
| } | |||||
| auto read_dir_all(const cppfs::path& p_path) | |||||
| { | |||||
| return __impl::read_dir_all_impl(p_path); | |||||
| } | |||||
| auto create_dir(const cppfs::path& p_path) | |||||
| { | |||||
| return lazy([d = cppfs::directory(p_path)]{ | |||||
| if (!d.exists()) | |||||
| d.create(false); | |||||
| }); | |||||
| } | |||||
| auto create_dir_all(const cppfs::path& p_path) | |||||
| { | |||||
| return lazy([d = cppfs::directory(p_path)]{ | |||||
| if (!d.exists()) | |||||
| d.create(true); | |||||
| }); | |||||
| } | |||||
| auto remove_dir(const cppfs::path& p_path) | |||||
| { | |||||
| return lazy([d = cppfs::directory(p_path)]{ | |||||
| if (d.exists()) | |||||
| d.remove(false); | |||||
| }); | |||||
| } | |||||
| auto remove_dir_all(const cppfs::path& p_path) | |||||
| { | |||||
| return lazy([d = cppfs::directory(p_path)]{ | |||||
| if (d.exists()) | |||||
| d.remove(true); | |||||
| }); | |||||
| } | |||||
| } } | |||||
| @@ -0,0 +1,49 @@ | |||||
| #pragma once | |||||
| #include <asyncpp/core/future/future.h> | |||||
| #include "directory.h" | |||||
| namespace asyncpp { | |||||
| namespace fs { | |||||
| namespace __directory { | |||||
| template< | |||||
| chaining_mode X_mode, | |||||
| typename X_self> | |||||
| inline auto create_impl(X_self&& p_self) | |||||
| { | |||||
| return lazy([self = std::forward<X_self>(p_self)] { | |||||
| if (!self.handle.exists()) | |||||
| self.handle.create(false); | |||||
| return self; // TODO: use std::forward | |||||
| }); | |||||
| } | |||||
| } } } | |||||
| namespace asyncpp { | |||||
| namespace fs { | |||||
| /* directory::create */ | |||||
| template<chaining_mode X_mode> | |||||
| auto directory | |||||
| ::create() & | |||||
| { | |||||
| return __directory::create_impl<X_mode>(*this); | |||||
| } | |||||
| template<chaining_mode X_mode> | |||||
| auto directory | |||||
| ::create() && | |||||
| { | |||||
| static_assert( | |||||
| X_mode != ref, | |||||
| "Can not store rvalue reference as lvalue reference!"); | |||||
| return __directory::create_impl<X_mode>(std::move(*this)); | |||||
| } | |||||
| } } | |||||
| @@ -0,0 +1,49 @@ | |||||
| #pragma once | |||||
| #include <asyncpp/core/future/future.h> | |||||
| #include "directory.h" | |||||
| namespace asyncpp { | |||||
| namespace fs { | |||||
| namespace __directory { | |||||
| template< | |||||
| chaining_mode X_mode, | |||||
| typename X_self> | |||||
| inline auto create_all_impl(X_self&& p_self) | |||||
| { | |||||
| return lazy([self = std::forward<X_self>(p_self)] { | |||||
| if (!self.handle.exists()) | |||||
| self.handle.create(true); | |||||
| return self; // TODO: use std::forward | |||||
| }); | |||||
| } | |||||
| } } } | |||||
| namespace asyncpp { | |||||
| namespace fs { | |||||
| /* directory::create */ | |||||
| template<chaining_mode X_mode> | |||||
| auto directory | |||||
| ::create_all() & | |||||
| { | |||||
| return __directory::create_all_impl<X_mode>(*this); | |||||
| } | |||||
| template<chaining_mode X_mode> | |||||
| auto directory | |||||
| ::create_all() && | |||||
| { | |||||
| static_assert( | |||||
| X_mode != ref, | |||||
| "Can not store rvalue reference as lvalue reference!"); | |||||
| return __directory::create_all_impl<X_mode>(std::move(*this)); | |||||
| } | |||||
| } } | |||||
| @@ -0,0 +1,100 @@ | |||||
| #pragma once | |||||
| #include <cppfs/directory.h> | |||||
| #include <asyncpp/core/misc/chaining.h> | |||||
| namespace asyncpp { | |||||
| namespace fs { | |||||
| struct directory | |||||
| { | |||||
| public: | |||||
| cppfs::directory handle; | |||||
| public: | |||||
| /** | |||||
| * @brief Constructor. | |||||
| */ | |||||
| inline directory(const cppfs::path& p_path); | |||||
| public: | |||||
| /** | |||||
| * @brief Create a new future to create a directory. | |||||
| */ | |||||
| template<chaining_mode X_mode = copy> | |||||
| inline auto create() &; | |||||
| /** | |||||
| * @brief Create a new future to create a directory. | |||||
| */ | |||||
| template<chaining_mode X_mode = move> | |||||
| inline auto create() &&; | |||||
| public: | |||||
| /** | |||||
| * @brief Create a new future to create a directory and all it's parent directories. | |||||
| */ | |||||
| template<chaining_mode X_mode = copy> | |||||
| inline auto create_all() &; | |||||
| /** | |||||
| * @brief Create a new future to create a directory and all it's parent directories. | |||||
| */ | |||||
| template<chaining_mode X_mode = move> | |||||
| inline auto create_all() &&; | |||||
| public: | |||||
| /** | |||||
| * @brief Create future to read the content of a directory. | |||||
| */ | |||||
| template<chaining_mode X_mode = copy> | |||||
| inline auto read() &; | |||||
| /** | |||||
| * @brief Create future to read the content of a directory. | |||||
| */ | |||||
| template<chaining_mode X_mode = move> | |||||
| inline auto read() &&; | |||||
| public: | |||||
| /** | |||||
| * @brief Create future to read the content of a directory including the subdirectories. | |||||
| */ | |||||
| template<chaining_mode X_mode = copy> | |||||
| inline auto read_all() &; | |||||
| /** | |||||
| * @brief Create future to read the content of a directory including the subdirectories. | |||||
| */ | |||||
| template<chaining_mode X_mode = move> | |||||
| inline auto read_all() &&; | |||||
| public: | |||||
| /** | |||||
| * @brief Create a new future to remove an empty directory. | |||||
| */ | |||||
| template<chaining_mode X_mode = copy> | |||||
| inline auto remove() &; | |||||
| /** | |||||
| * @brief Create a new future to remove an empty directory. | |||||
| */ | |||||
| template<chaining_mode X_mode = move> | |||||
| inline auto remove() &&; | |||||
| public: | |||||
| /** | |||||
| * @brief Create a new future to remove a directory and all it's content. | |||||
| */ | |||||
| template<chaining_mode X_mode = copy> | |||||
| inline auto remove_all() &; | |||||
| /** | |||||
| * @brief Create a new future to remove a directory and all it's content. | |||||
| */ | |||||
| template<chaining_mode X_mode = move> | |||||
| inline auto remove_all() &&; | |||||
| }; | |||||
| } } | |||||
| @@ -0,0 +1,14 @@ | |||||
| #pragma once | |||||
| #include "directory.h" | |||||
| namespace asyncpp { | |||||
| namespace fs { | |||||
| /* directory */ | |||||
| inline directory::directory(const cppfs::path& p_path) | |||||
| : handle(p_path) | |||||
| { } | |||||
| } } | |||||
| @@ -0,0 +1,80 @@ | |||||
| #pragma once | |||||
| #include <cppfs/directory.h> | |||||
| #include "directory.h" | |||||
| namespace asyncpp { | |||||
| namespace fs { | |||||
| namespace __directory { | |||||
| struct read_stream | |||||
| : public base_stream< | |||||
| cppfs::directory::entry, | |||||
| read_stream> | |||||
| { | |||||
| public: | |||||
| using value_type = cppfs::directory::entry; | |||||
| using this_type = read_stream; | |||||
| using base_future_type = base_stream<value_type, this_type>; | |||||
| using result_type = typename base_future_type::result_type; | |||||
| private: | |||||
| cppfs::directory::iterator _it; | |||||
| cppfs::directory::iterator _end; | |||||
| public: | |||||
| inline read_stream( | |||||
| const fs::directory& p_directory) | |||||
| { | |||||
| auto& d = p_directory.handle; | |||||
| if (d.exists()) | |||||
| { | |||||
| _it = d.begin(); | |||||
| _end = d.end(); | |||||
| } | |||||
| } | |||||
| public: | |||||
| inline result_type poll() | |||||
| { | |||||
| if (_it == _end) | |||||
| return result_type::done(); | |||||
| auto ret = result_type::ready(*_it); | |||||
| ++_it; | |||||
| return ret; | |||||
| } | |||||
| }; | |||||
| template< | |||||
| chaining_mode X_mode, | |||||
| typename X_self> | |||||
| inline auto read_impl(X_self&& p_self) | |||||
| { return read_stream(std::forward<X_self>(p_self)); } | |||||
| } } } | |||||
| namespace asyncpp { | |||||
| namespace fs { | |||||
| template<chaining_mode X_mode> | |||||
| auto directory | |||||
| ::read() & | |||||
| { | |||||
| return __directory::read_impl<X_mode>(*this); | |||||
| } | |||||
| template<chaining_mode X_mode> | |||||
| auto directory | |||||
| ::read() && | |||||
| { | |||||
| static_assert( | |||||
| X_mode != ref, | |||||
| "Can not store rvalue reference as lvalue reference!"); | |||||
| return __directory::read_impl<X_mode>(std::move(*this)); | |||||
| } | |||||
| } } | |||||
| @@ -0,0 +1,111 @@ | |||||
| #pragma once | |||||
| #include <vector> | |||||
| #include <cppfs/directory.h> | |||||
| #include "directory.h" | |||||
| namespace asyncpp { | |||||
| namespace fs { | |||||
| namespace __directory { | |||||
| struct read_all_stream | |||||
| : public base_stream< | |||||
| cppfs::directory::entry, | |||||
| read_all_stream> | |||||
| { | |||||
| public: | |||||
| using value_type = cppfs::directory::entry; | |||||
| using this_type = read_all_stream; | |||||
| using base_future_type = base_stream<value_type, this_type>; | |||||
| using result_type = typename base_future_type::result_type; | |||||
| private: | |||||
| struct entry | |||||
| { | |||||
| cppfs::directory::iterator it; | |||||
| cppfs::directory::iterator end; | |||||
| }; | |||||
| using entry_stack = std::vector<entry>; | |||||
| entry_stack _stack; | |||||
| public: | |||||
| inline read_all_stream( | |||||
| const fs::directory& p_directory) | |||||
| { | |||||
| auto& d = p_directory.handle; | |||||
| if (d.exists()) | |||||
| { | |||||
| _stack.emplace_back(entry { | |||||
| d.begin(), | |||||
| d.end() | |||||
| }); | |||||
| } | |||||
| } | |||||
| public: | |||||
| inline result_type poll() | |||||
| { | |||||
| while (true) | |||||
| { | |||||
| if (_stack.empty()) | |||||
| return result_type::done(); | |||||
| auto& e = _stack.back(); | |||||
| if (e.it == e.end) | |||||
| { | |||||
| _stack.pop_back(); | |||||
| continue; | |||||
| } | |||||
| auto ret = result_type::ready(std::move(*e.it)); | |||||
| cppfs::directory d(e.it->path); | |||||
| ++e.it; | |||||
| if (d.exists()) | |||||
| { | |||||
| _stack.emplace_back(entry { | |||||
| d.begin(), | |||||
| d.end(), | |||||
| }); | |||||
| } | |||||
| return ret; | |||||
| } | |||||
| } | |||||
| }; | |||||
| template< | |||||
| chaining_mode X_mode, | |||||
| typename X_self> | |||||
| inline auto read_all_impl(X_self&& p_self) | |||||
| { return read_all_stream(std::forward<X_self>(p_self)); } | |||||
| } } } | |||||
| namespace asyncpp { | |||||
| namespace fs { | |||||
| template<chaining_mode X_mode> | |||||
| auto directory | |||||
| ::read_all() & | |||||
| { | |||||
| return __directory::read_all_impl<X_mode>(*this); | |||||
| } | |||||
| template<chaining_mode X_mode> | |||||
| auto directory | |||||
| ::read_all() && | |||||
| { | |||||
| static_assert( | |||||
| X_mode != ref, | |||||
| "Can not store rvalue reference as lvalue reference!"); | |||||
| return __directory::read_all_impl<X_mode>(std::move(*this)); | |||||
| } | |||||
| } } | |||||
| @@ -0,0 +1,49 @@ | |||||
| #pragma once | |||||
| #include <asyncpp/core/future/future.h> | |||||
| #include "directory.h" | |||||
| namespace asyncpp { | |||||
| namespace fs { | |||||
| namespace __directory { | |||||
| template< | |||||
| chaining_mode X_mode, | |||||
| typename X_self> | |||||
| inline auto remove_impl(X_self&& p_self) | |||||
| { | |||||
| return lazy([self = std::forward<X_self>(p_self)] { | |||||
| if (self.handle.exists()) | |||||
| self.handle.remove(false); | |||||
| return self; // TODO: use std::forward | |||||
| }); | |||||
| } | |||||
| } } } | |||||
| namespace asyncpp { | |||||
| namespace fs { | |||||
| /* directory::remove */ | |||||
| template<chaining_mode X_mode> | |||||
| auto directory | |||||
| ::remove() & | |||||
| { | |||||
| return __directory::remove_impl<X_mode>(*this); | |||||
| } | |||||
| template<chaining_mode X_mode> | |||||
| auto directory | |||||
| ::remove() && | |||||
| { | |||||
| static_assert( | |||||
| X_mode != ref, | |||||
| "Can not store rvalue reference as lvalue reference!"); | |||||
| return __directory::remove_impl<X_mode>(std::move(*this)); | |||||
| } | |||||
| } } | |||||
| @@ -0,0 +1,49 @@ | |||||
| #pragma once | |||||
| #include <asyncpp/core/future/future.h> | |||||
| #include "directory.h" | |||||
| namespace asyncpp { | |||||
| namespace fs { | |||||
| namespace __directory { | |||||
| template< | |||||
| chaining_mode X_mode, | |||||
| typename X_self> | |||||
| inline auto remove_all_impl(X_self&& p_self) | |||||
| { | |||||
| return lazy([self = std::forward<X_self>(p_self)] { | |||||
| if (self.handle.exists()) | |||||
| self.handle.remove(true); | |||||
| return self; // TODO: use std::forward | |||||
| }); | |||||
| } | |||||
| } } } | |||||
| namespace asyncpp { | |||||
| namespace fs { | |||||
| /* directory::create */ | |||||
| template<chaining_mode X_mode> | |||||
| auto directory | |||||
| ::remove_all() & | |||||
| { | |||||
| return __directory::remove_all_impl<X_mode>(*this); | |||||
| } | |||||
| template<chaining_mode X_mode> | |||||
| auto directory | |||||
| ::remove_all() && | |||||
| { | |||||
| static_assert( | |||||
| X_mode != ref, | |||||
| "Can not store rvalue reference as lvalue reference!"); | |||||
| return __directory::remove_all_impl<X_mode>(std::move(*this)); | |||||
| } | |||||
| } } | |||||
| @@ -1,6 +1,6 @@ | |||||
| #pragma once | #pragma once | ||||
| #define ASYNCPP_FEATURE_TIMING_ENABLED | |||||
| #define ASYNCPP_ENABLE_FEATURE_TIMING | |||||
| #include "timing/delay.h" | #include "timing/delay.h" | ||||
| #include "timing/interval.h" | #include "timing/interval.h" | ||||
| @@ -67,7 +67,7 @@ TEST_F(directory_tests, read_dir) | |||||
| using namespace cppfs; | using namespace cppfs; | ||||
| using namespace std::string_literals; | using namespace std::string_literals; | ||||
| auto s = fs::read_dir("."s); | |||||
| auto s = fs::directory("."s).read(); | |||||
| auto v = std::vector<std::string>(); | auto v = std::vector<std::string>(); | ||||
| auto r = decltype(s)::result_type::not_ready(); | auto r = decltype(s)::result_type::not_ready(); | ||||
| @@ -89,7 +89,7 @@ TEST_F(directory_tests, read_dir_all) | |||||
| using namespace cppfs; | using namespace cppfs; | ||||
| using namespace std::string_literals; | using namespace std::string_literals; | ||||
| auto s = fs::read_dir_all("."s); | |||||
| auto s = fs::directory("."s).read_all(); | |||||
| auto r = decltype(s)::result_type::not_ready(); | auto r = decltype(s)::result_type::not_ready(); | ||||
| auto entries = std::vector<cppfs::directory::entry>(); | auto entries = std::vector<cppfs::directory::entry>(); | ||||
| @@ -137,11 +137,8 @@ TEST_F(directory_tests, read_dir_all) | |||||
| TEST_F(directory_tests, create_dir) | TEST_F(directory_tests, create_dir) | ||||
| { | { | ||||
| auto f = | |||||
| lazy([path=path_test_dir_single()]{ | |||||
| return path; | |||||
| }) | |||||
| .and_then(fs::create_dir); | |||||
| auto f = fs::directory(path_test_dir_single()) | |||||
| .create(); | |||||
| auto_remove_dir d(path_test_dir_single()); | auto_remove_dir d(path_test_dir_single()); | ||||
| @@ -155,11 +152,8 @@ TEST_F(directory_tests, create_dir) | |||||
| TEST_F(directory_tests, create_dir_all) | TEST_F(directory_tests, create_dir_all) | ||||
| { | { | ||||
| auto f = | |||||
| lazy([path=path_test_dir_child()]{ | |||||
| return path; | |||||
| }) | |||||
| .and_then(fs::create_dir_all); | |||||
| auto f = fs::directory(path_test_dir_child()) | |||||
| .create_all(); | |||||
| auto_remove_dir d(path_test_dir_child()); | auto_remove_dir d(path_test_dir_child()); | ||||
| @@ -173,11 +167,8 @@ TEST_F(directory_tests, create_dir_all) | |||||
| TEST_F(directory_tests, remove_dir) | TEST_F(directory_tests, remove_dir) | ||||
| { | { | ||||
| auto f = | |||||
| lazy([path=path_test_dir_single()]{ | |||||
| return path; | |||||
| }) | |||||
| .and_then(fs::remove_dir); | |||||
| auto f = fs::directory(path_test_dir_single()) | |||||
| .remove(); | |||||
| auto_remove_dir d(path_test_dir_single()); | auto_remove_dir d(path_test_dir_single()); | ||||
| d.create(true); | d.create(true); | ||||
| @@ -192,11 +183,8 @@ TEST_F(directory_tests, remove_dir) | |||||
| TEST_F(directory_tests, remove_dir_all) | TEST_F(directory_tests, remove_dir_all) | ||||
| { | { | ||||
| auto f = | |||||
| lazy([path=path_test_dir_parent()]{ | |||||
| return path; | |||||
| }) | |||||
| .and_then(fs::remove_dir_all); | |||||
| auto f = fs::directory(path_test_dir_child()) | |||||
| .remove_all(); | |||||
| auto_remove_dir d(path_test_dir_child()); | auto_remove_dir d(path_test_dir_child()); | ||||
| d.create(true); | d.create(true); | ||||