OpenXLSX 1.9.1
Loading...
Searching...
No Matches
IZipArchive.hpp
Go to the documentation of this file.
1#ifndef OPENXLSX_IZIPARCHIVE_HPP
2#define OPENXLSX_IZIPARCHIVE_HPP
3
4#ifdef _MSC_VER // conditionally enable MSVC specific pragmas to avoid other compilers warning about unknown pragmas
5# pragma warning(push)
6# pragma warning(disable : 4251)
7# pragma warning(disable : 4275)
8#endif // _MSC_VER
9
10// ===== OpenXLSX Includes ===== //
11#include "OpenXLSX-Exports.hpp"
12
13#include <memory>
14#include <string>
15#include <vector>
16
17namespace OpenXLSX
18{
25 class OPENXLSX_EXPORT IZipArchive
26 {
27 public:
31 IZipArchive() : m_zipArchive() {} // NOLINT
32
40 template<typename T>
41 IZipArchive(const T& zipArchive) : m_zipArchive{std::make_unique<Model<T>>(zipArchive)}
42 {} // NOLINT
43
48 IZipArchive(const IZipArchive& other) : m_zipArchive(other.m_zipArchive ? other.m_zipArchive->clone() : nullptr) {}
49
54 IZipArchive(IZipArchive&& other) noexcept = default;
55
59 ~IZipArchive() = default;
60
67 template<typename T>
68 inline IZipArchive& operator=(const T& zipArchive)
69 {
70 m_zipArchive = std::make_unique<Model<T>>(zipArchive);
71 return *this;
72 }
73
79 inline IZipArchive& operator=(const IZipArchive& other)
80 {
81 IZipArchive copy(other);
82 *this = std::move(copy);
83 return *this;
84 }
85
91 inline IZipArchive& operator=(IZipArchive&& other) noexcept = default;
92
97 inline explicit operator bool() const { return isValid(); }
98
99 inline bool isValid() const { return m_zipArchive->isValid(); }
100
101 inline bool isOpen() const { return m_zipArchive->isOpen(); }
102
103 inline void open(const std::string& fileName) { m_zipArchive->open(fileName); }
104
105 inline void close() const { m_zipArchive->close(); }
106
107 inline void save(const std::string& path) { m_zipArchive->save(path); }
108
109 inline void addEntry(const std::string& name, const std::string& data) { m_zipArchive->addEntry(name, data); }
110
111 inline void addEntryFromFile(std::string_view name, std::string_view filePath)
112 { m_zipArchive->addEntryFromFile(std::string(name), std::string(filePath)); }
113
114 inline void deleteEntry(const std::string& entryName) { m_zipArchive->deleteEntry(entryName); }
115
116 inline std::string getEntry(const std::string& name) const { return m_zipArchive->getEntry(name); }
117
118 inline void* openEntryStream(std::string_view name) const { return m_zipArchive->openEntryStream(name); }
119 inline int64_t readEntryStream(void* stream, char* buffer, uint64_t size) const
120 { return m_zipArchive->readEntryStream(stream, buffer, size); }
121 inline void closeEntryStream(void* stream) const { m_zipArchive->closeEntryStream(stream); }
122
123 inline bool hasEntry(const std::string& entryName) const { return m_zipArchive->hasEntry(entryName); }
124
125 inline std::vector<std::string> entryNames() const { return m_zipArchive->entryNames(); }
126
127 inline void setCompressionLevel(int level) { m_zipArchive->setCompressionLevel(level); }
128 inline int compressionLevel() const { return m_zipArchive->compressionLevel(); }
129
130 private:
134 struct Concept
135 {
136 public:
140 Concept() = default;
141
145 Concept(const Concept&) = default;
146
150 Concept(Concept&&) noexcept = default;
151
155 virtual ~Concept() = default;
156
161 inline Concept& operator=(const Concept&) = default;
162
167 inline Concept& operator=(Concept&&) noexcept = default;
168
173 inline virtual std::unique_ptr<Concept> clone() const = 0;
174
175 inline virtual bool isValid() const = 0;
176
177 inline virtual bool isOpen() const = 0;
178
179 inline virtual void open(const std::string& fileName) = 0;
180
181 inline virtual void close() const = 0;
182
183 inline virtual void save(const std::string& path) const = 0;
184
185 inline virtual void addEntry(const std::string& name, const std::string& data) = 0;
186
187 inline virtual void addEntryFromFile(std::string_view name, std::string_view filePath) = 0;
188
189 inline virtual void deleteEntry(const std::string& entryName) = 0;
190
191 inline virtual std::string getEntry(const std::string& name) const = 0;
192
193 inline virtual void* openEntryStream(std::string_view name) const = 0;
194 inline virtual int64_t readEntryStream(void* stream, char* buffer, uint64_t size) const = 0;
195 inline virtual void closeEntryStream(void* stream) const = 0;
196
197 inline virtual bool hasEntry(const std::string& entryName) const = 0;
198
199 inline virtual std::vector<std::string> entryNames() const = 0;
200
201 inline virtual void setCompressionLevel(int level) = 0;
202 inline virtual int compressionLevel() const = 0;
203 };
204
209 template<typename T>
210 struct Model : Concept
211 {
212 public:
217 explicit Model(const T& x) : ZipType(x) {}
218
223 Model(const Model& other) = default;
224
229 Model(Model&& other) noexcept = default;
230
234 ~Model() override = default;
235
241 inline Model& operator=(const Model& other) = default;
242
248 inline Model& operator=(Model&& other) noexcept = default;
249
254 inline std::unique_ptr<Concept> clone() const override { return std::make_unique<Model<T>>(ZipType); }
255
256 inline bool isValid() const override { return ZipType.isValid(); }
257
258 inline bool isOpen() const override { return ZipType.isOpen(); }
259
260 inline void open(const std::string& fileName) override { ZipType.open(fileName); }
261
262 inline void close() const override { ZipType.close(); }
263
264 inline void save(const std::string& path) const override { ZipType.save(path); }
265
266 inline void addEntry(const std::string& name, const std::string& data) override { ZipType.addEntry(name, data); }
267
268 inline void addEntryFromFile(std::string_view name, std::string_view filePath) override
269 { ZipType.addEntryFromFile(name, filePath); }
270
271 inline void deleteEntry(const std::string& entryName) override { ZipType.deleteEntry(entryName); }
272
273 inline std::string getEntry(const std::string& name) const override { return ZipType.getEntry(name); }
274
275 inline void* openEntryStream(std::string_view name) const override { return ZipType.openEntryStream(name); }
276 inline int64_t readEntryStream(void* stream, char* buffer, uint64_t size) const override
277 { return ZipType.readEntryStream(stream, buffer, size); }
278 inline void closeEntryStream(void* stream) const override { ZipType.closeEntryStream(stream); }
279
280 inline bool hasEntry(const std::string& entryName) const override { return ZipType.hasEntry(entryName); }
281
282 inline std::vector<std::string> entryNames() const override { return ZipType.entryNames(); }
283
284 inline void setCompressionLevel(int level) override { ZipType.setCompressionLevel(level); }
285 inline int compressionLevel() const override { return ZipType.compressionLevel(); }
286
287 private:
288 mutable T ZipType;
289 };
290
291 std::unique_ptr<Concept> m_zipArchive;
292 };
293
294} // namespace OpenXLSX
295
296#ifdef _MSC_VER // conditionally enable MSVC specific pragmas to avoid other compilers warning about unknown pragmas
297# pragma warning(pop)
298#endif // _MSC_VER
299
300#endif // OPENXLSX_IZIPARCHIVE_HPP
This class functions as a wrapper around any class that provides the necessary functionality for a zi...
Definition IZipArchive.hpp:26
IZipArchive()
Default constructor.
Definition IZipArchive.hpp:31
void save(const std::string &path)
Definition IZipArchive.hpp:107
IZipArchive & operator=(const T &zipArchive)
Definition IZipArchive.hpp:68
IZipArchive(const IZipArchive &other)
Copy constructor.
Definition IZipArchive.hpp:48
std::string getEntry(const std::string &name) const
Definition IZipArchive.hpp:116
bool isOpen() const
Definition IZipArchive.hpp:101
IZipArchive & operator=(const IZipArchive &other)
Definition IZipArchive.hpp:79
int compressionLevel() const
Definition IZipArchive.hpp:128
IZipArchive(const T &zipArchive)
Constructor, taking the target object as an argument.
Definition IZipArchive.hpp:41
void closeEntryStream(void *stream) const
Definition IZipArchive.hpp:121
IZipArchive(IZipArchive &&other) noexcept=default
Move constructor.
~IZipArchive()=default
Destructor.
std::vector< std::string > entryNames() const
Definition IZipArchive.hpp:125
void addEntryFromFile(std::string_view name, std::string_view filePath)
Definition IZipArchive.hpp:111
bool isValid() const
Definition IZipArchive.hpp:99
void * openEntryStream(std::string_view name) const
Definition IZipArchive.hpp:118
int64_t readEntryStream(void *stream, char *buffer, uint64_t size) const
Definition IZipArchive.hpp:119
void setCompressionLevel(int level)
Definition IZipArchive.hpp:127
void open(const std::string &fileName)
Definition IZipArchive.hpp:103
void addEntry(const std::string &name, const std::string &data)
Definition IZipArchive.hpp:109
void deleteEntry(const std::string &entryName)
Definition IZipArchive.hpp:114
IZipArchive & operator=(IZipArchive &&other) noexcept=default
void close() const
Definition IZipArchive.hpp:105
bool hasEntry(const std::string &entryName) const
Definition IZipArchive.hpp:123
Definition IZipArchive.hpp:18
Definition XLCellIterator.hpp:121