Go to the documentation of this file.
15 #include <immer/box.hpp>
16 #include <immer/flex_vector.hpp>
51 template<
class DeriveT>
53 : m_d(
std::make_unique<Model<
std::decay_t<DeriveT>>>(
54 std::forward<DeriveT>(o))) {}
64 template<
class Callback>
65 void read(
int maxSize, Callback readCallback) { m_d->read(maxSize, readCallback); }
74 template<
class Callback>
75 void write(
DataT data, Callback writeCallback) { m_d->write(data, writeCallback); }
81 virtual ~Concept() =
default;
83 using WriteCallback = std::function<void(
FileOpRetCode,
int)>;
85 virtual void read(
int maxSize, ReadCallback callback) = 0;
86 virtual void write(
DataT data, WriteCallback callback) = 0;
89 template<
class DeriveT>
90 struct Model :
public Concept
92 explicit Model(
const DeriveT &o) : obj(o) {}
93 explicit Model(DeriveT &&o) : obj(
std::move(o)) {}
94 ~Model()
override =
default;
95 void read(
int maxSize, ReadCallback callback)
override {
96 return obj.read(maxSize, callback);
98 void write(
DataT data, WriteCallback callback)
override {
99 return obj.write(data, callback);
105 std::unique_ptr<Concept> m_d;
128 template<
class DeriveT>
130 : m_d(
std::make_unique<Model<
std::decay_t<DeriveT>>>(
131 std::forward<DeriveT>(o))) {}
137 m_d = that.m_d->clone();
142 m_d = std::move(that.m_d);
153 return m_d->getStream(mode);
159 virtual ~Concept() =
default;
160 virtual std::unique_ptr<Concept> clone()
const = 0;
164 template<
class DeriveT>
165 struct Model :
public Concept
167 explicit Model(
const DeriveT &o) : obj(o) {}
168 explicit Model(DeriveT &&o) : obj(
std::move(o)) {}
169 ~Model()
override =
default;
170 std::unique_ptr<Concept> clone()
const override {
171 return std::make_unique<Model>(obj);
174 return obj.getStream(mode);
180 std::unique_ptr<Concept> m_d;
191 template<
class Callback>
192 void read(
int maxSize, Callback callback) {
202 template<
class Callback>
239 std::optional<std::string>
contentType = std::nullopt)
241 , m_name(std::move(
name))
253 FileProvider
provider(
const FileInterface &fh)
const;
258 inline std::optional<std::string>
name()
const {
return m_name; }
263 inline std::optional<std::string>
contentType()
const {
return m_contentType; }
270 std::optional<std::string> m_name;
271 std::optional<std::string> m_contentType;
294 template<
class DeriveT>
296 : m_d(
std::make_unique<Model<
std::decay_t<DeriveT>>>(
297 std::forward<DeriveT>(o))) {}
306 return m_d->getProviderFor(std::move(desc));
312 virtual ~Concept() =
default;
316 template<
class DeriveT>
317 struct Model :
public Concept
319 explicit Model(
const DeriveT &o) : obj(o) {}
320 explicit Model(DeriveT &&o) : obj(
std::move(o)) {}
321 ~Model()
override =
default;
323 return obj.getProviderFor(std::move(desc));
329 std::unique_ptr<Concept> m_d;
DumbFileProvider(FileContent content)
Definition: file-desc.hpp:213
FileDesc(std::string name, std::optional< std::string > contentType=std::nullopt)
Construct a FileDesc with name and contentType.
Definition: file-desc.hpp:238
FileContent DataT
Definition: file-desc.hpp:38
void read(int maxSize, Callback readCallback)
Read at most maxSize bytes from the stream.
Definition: file-desc.hpp:65
FileProvider(DeriveT &&o)
Constructor.
Definition: file-desc.hpp:129
FileProvider getProviderFor(FileDesc desc) const
Get the provider for desc from this.
Definition: file-desc.hpp:305
FileDesc(FileContent content)
Construct an in-memory FileDesc with content.
Definition: file-desc.hpp:230
FileProvider provider(const FileInterface &fh) const
Get the FileProvider for this FileDesc using FileInterface.
Definition: file-desc.cpp:17
FileStream getStream(FileOpenMode mode=FileOpenMode::Read) const
Get the file stream provided by this.
Definition: file-desc.hpp:152
FileContent m_content
Definition: file-desc.hpp:221
DumbFileStream(FileContent r)
Definition: file-desc.hpp:189
Definition: file-desc.hpp:274
void write(FileContent data, Callback callback)
Definition: file-desc.hpp:203
FileStream(DeriveT &&o)
Constructor.
Definition: file-desc.hpp:52
Definition: location.hpp:10
Definition: file-desc.hpp:187
DumbFileStream getStream(FileOpenMode) const
Definition: file-desc.hpp:217
Definition: file-desc.hpp:280
void read(int maxSize, Callback callback)
Definition: file-desc.hpp:192
Definition: file-desc.hpp:211
Definition: file-desc.hpp:108
void write(DataT data, Callback writeCallback)
Write data into the stream.
Definition: file-desc.hpp:75
std::optional< std::string > contentType() const
Get the content type for this FileDesc.
Definition: file-desc.hpp:263
FileProvider(FileProvider &&that)
Definition: file-desc.hpp:134
FileOpRetCode
Definition: file-desc.hpp:20
immer::flex_vector< char > FileContent
Definition: file-desc.hpp:33
FileOpenMode
Definition: file-desc.hpp:27
std::optional< std::string > name() const
Get the name for this FileDesc.
Definition: file-desc.hpp:258
bool operator==(const FileDesc &that) const
Definition: file-desc.cpp:45
FileProvider(const FileProvider &that)
Definition: file-desc.hpp:133
Definition: clientutil.hpp:216
FileInterface(DeriveT &&o)
Constructor.
Definition: file-desc.hpp:295
Definition: file-desc.hpp:224
DumbFileProvider getProviderFor(FileDesc desc) const
Definition: file-desc.cpp:25
Definition: file-desc.hpp:35
FileProvider & operator=(FileProvider &&that)
Definition: file-desc.hpp:141
FileProvider & operator=(const FileProvider &that)
Definition: file-desc.hpp:136
FileContent remaining
Definition: file-desc.hpp:208