vfs worker access

This commit is contained in:
BlackMATov
2019-12-29 00:36:43 +07:00
parent 3cb4890737
commit 349d88bc05
2 changed files with 16 additions and 4 deletions

View File

@@ -25,9 +25,6 @@ namespace e2d
class vfs final : public module<vfs> {
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<file_source>;
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);

View File

@@ -108,9 +108,18 @@ namespace e2d
vfs::vfs()
: state_(new state()){}
vfs::~vfs() noexcept = default;
stdex::jobber& vfs::worker() noexcept {
std::lock_guard<std::mutex> guard(state_->mutex);
return state_->worker;
}
const stdex::jobber& vfs::worker() const noexcept {
std::lock_guard<std::mutex> guard(state_->mutex);
return state_->worker;
}
bool vfs::register_scheme(str_view scheme, file_source_uptr source) {
std::lock_guard<std::mutex> guard(state_->mutex);
return (source && source->valid())