41 explicit virtual_fs_operator(T&& value) : wrapper_{std::make_shared<wrapper<T>>(std::forward<T>(value))} {}
48 [[nodiscard]]
bool exists(std::string_view path)
const {
49 return wrapper_->exists(path);
57 [[nodiscard]]
bool is_file(std::string_view path)
const {
58 return wrapper_->is_file(path);
67 return wrapper_->is_directory(path);
76 [[nodiscard]] std::unique_ptr<std::iostream>
open(
77 std::string_view path, std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out)
const {
78 return wrapper_->open(path, mode);
87 [[nodiscard]] std::unique_ptr<std::istream>
open_read(
88 std::string_view path, std::ios_base::openmode mode = std::ios_base::in)
const {
89 return wrapper_->open_read(path, mode);
99 std::string_view path, std::ios_base::openmode mode = std::ios_base::out)
const {
100 return wrapper_->open_write(path, mode);
105 virtual ~base() =
default;
106 virtual bool exists(std::string_view path) = 0;
107 virtual bool is_file(std::string_view path) = 0;
108 virtual bool is_directory(std::string_view path) = 0;
109 virtual std::unique_ptr<std::iostream> open(std::string_view path, std::ios_base::openmode mode) = 0;
110 virtual std::unique_ptr<std::istream> open_read(std::string_view path, std::ios_base::openmode mode) = 0;
111 virtual std::unique_ptr<std::ostream> open_write(std::string_view path, std::ios_base::openmode mode) = 0;
114 template <
typename T>
115 class wrapper final :
public base {
117 template <std::convertible_to<T> U>
118 explicit wrapper(U&& value) : value_{std::forward<U>(value)} {}
120 bool exists(std::string_view path)
override {
121 return value_.exists(path);
124 bool is_file(std::string_view path)
override {
125 return value_.is_file(path);
128 bool is_directory(std::string_view path)
override {
129 return value_.is_directory(path);
132 std::unique_ptr<std::iostream> open(std::string_view path, std::ios_base::openmode mode)
override {
133 return value_.open(path, mode);
136 std::unique_ptr<std::istream> open_read(std::string_view path, std::ios_base::openmode mode)
override {
137 return value_.open_read(path, mode);
140 std::unique_ptr<std::ostream> open_write(std::string_view path, std::ios_base::openmode mode)
override {
141 return value_.open_write(path, mode);
148 std::shared_ptr<base> wrapper_;
std::unique_ptr< std::iostream > open(std::string_view path, std::ios_base::openmode mode=std::ios_base::in|std::ios_base::out) const
Opens a file in read-write mode.
Definition virtual_fs_operator.hpp:76
std::unique_ptr< std::ostream > open_write(std::string_view path, std::ios_base::openmode mode=std::ios_base::out) const
Opens a file in write-only mode.
Definition virtual_fs_operator.hpp:98
std::unique_ptr< std::istream > open_read(std::string_view path, std::ios_base::openmode mode=std::ios_base::in) const
Opens a file in read-only mode.
Definition virtual_fs_operator.hpp:87