diff --git a/headers/enduro2d/core/vfs.hpp b/headers/enduro2d/core/vfs.hpp index 08f4fdc1..d7850c03 100644 --- a/headers/enduro2d/core/vfs.hpp +++ b/headers/enduro2d/core/vfs.hpp @@ -25,9 +25,6 @@ namespace e2d class vfs final : public module { public: - vfs(); - ~vfs() noexcept final; - class file_source : private e2d::noncopyable { public: virtual ~file_source() noexcept = default; @@ -38,6 +35,12 @@ namespace e2d virtual bool trace(str_view path, filesystem::trace_func func) const = 0; }; using file_source_uptr = std::unique_ptr; + public: + vfs(); + ~vfs() noexcept final; + + stdex::jobber& worker() noexcept; + const stdex::jobber& worker() const noexcept; template < typename T, typename... Args > bool register_scheme(str_view scheme, Args&&... args); diff --git a/sources/enduro2d/core/vfs.cpp b/sources/enduro2d/core/vfs.cpp index 6fdeaded..506303e0 100644 --- a/sources/enduro2d/core/vfs.cpp +++ b/sources/enduro2d/core/vfs.cpp @@ -108,9 +108,18 @@ namespace e2d vfs::vfs() : state_(new state()){} - vfs::~vfs() noexcept = default; + stdex::jobber& vfs::worker() noexcept { + std::lock_guard guard(state_->mutex); + return state_->worker; + } + + const stdex::jobber& vfs::worker() const noexcept { + std::lock_guard guard(state_->mutex); + return state_->worker; + } + bool vfs::register_scheme(str_view scheme, file_source_uptr source) { std::lock_guard guard(state_->mutex); return (source && source->valid())