roo_io
API Documentation for roo_io
Loading...
Searching...
No Matches
mount_impl.h
Go to the documentation of this file.
1#pragma once
2
3#include <functional>
4#include <memory>
5
10#include "roo_io/fs/stat.h"
11#include "roo_io/status.h"
12
13namespace roo_io {
14
15class Stat;
16
17class MountImpl {
18 public:
19 struct MountResult {
21 std::unique_ptr<MountImpl> mount;
22 };
23
24 static MountResult Mounted(std::unique_ptr<MountImpl> mount_impl);
25
26 static MountResult MountError(Status status);
27
28 virtual ~MountImpl() {
29 if (unmount_fn_ != nullptr) unmount_fn_();
30 }
31
32 virtual bool isReadOnly() const = 0;
33
34 virtual Stat stat(const char* path) const = 0;
35
36 // Can return 'kOk', 'kNotMounted', 'kNotFound', 'kInvalidPath',
37 // 'kNotFile', 'kOutOfMemory', 'kUnknownIOError'.
38 virtual Status remove(const char* path) = 0;
39
40 virtual Status rename(const char* pathFrom, const char* pathTo) = 0;
41
42 // Can return 'kOk', 'kNotMounted', 'kDirectoryExists', 'kInvalidPath',
43 // 'kInvalidType', 'kOutOfMemory', 'kUnknownIOError'.
44 virtual Status mkdir(const char* path) = 0;
45
46 virtual Status rmdir(const char* path) = 0;
47
48 virtual std::unique_ptr<DirectoryImpl> opendir(
49 std::shared_ptr<MountImpl> mount, const char* path) = 0;
50
51 virtual std::unique_ptr<MultipassInputStream> fopen(
52 std::shared_ptr<MountImpl> mount, const char* path) = 0;
53
54 virtual std::unique_ptr<OutputStream> fopenForWrite(
55 std::shared_ptr<MountImpl> mount, const char* path,
57
58 virtual bool active() const = 0;
59
60 // Called in case this mount gets forcefully closed. Further method calls
61 // should fail with kNotMounted.
62 virtual void deactivate() = 0;
63
64 protected:
65 MountImpl(std::function<void()> unmount_fn) : unmount_fn_(unmount_fn) {}
66
67 private:
68 std::function<void()> unmount_fn_;
69};
70
71// Helper functions.
72std::unique_ptr<DirectoryImpl> DirectoryError(Status error);
73std::unique_ptr<MultipassInputStream> InputError(Status error);
74std::unique_ptr<OutputStream> OutputError(Status error);
75
76} // namespace roo_io
MountImpl(std::function< void()> unmount_fn)
Definition mount_impl.h:65
virtual std::unique_ptr< MultipassInputStream > fopen(std::shared_ptr< MountImpl > mount, const char *path)=0
static MountResult MountError(Status status)
virtual std::unique_ptr< OutputStream > fopenForWrite(std::shared_ptr< MountImpl > mount, const char *path, FileUpdatePolicy update_policy)=0
virtual Status rmdir(const char *path)=0
virtual Stat stat(const char *path) const =0
virtual bool active() const =0
static MountResult Mounted(std::unique_ptr< MountImpl > mount_impl)
Definition mount_impl.cpp:8
virtual Status remove(const char *path)=0
virtual std::unique_ptr< DirectoryImpl > opendir(std::shared_ptr< MountImpl > mount, const char *path)=0
virtual bool isReadOnly() const =0
virtual Status rename(const char *pathFrom, const char *pathTo)=0
virtual ~MountImpl()
Definition mount_impl.h:28
virtual Status mkdir(const char *path)=0
virtual void deactivate()=0
Definition byte.h:6
std::unique_ptr< DirectoryImpl > DirectoryError(Status error)
roo::basic_string_view< CharT, Traits > basic_string_view
Definition string_view.h:8
Status
Definition status.h:7
std::unique_ptr< OutputStream > OutputError(Status error)
std::unique_ptr< MultipassInputStream > InputError(Status error)
std::unique_ptr< MountImpl > mount
Definition mount_impl.h:21