OpenXLSX 1.10.0
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, std::string data) { m_zipArchive->addEntry(name, std::move(data)); }
110
111 inline void addEntryAllocated(std::string_view name, void* data, size_t size)
112 { m_zipArchive->addEntryAllocated(name, data, size); }
113
114 inline void addEntryFromFile(std::string_view name, std::string_view filePath)
115 { m_zipArchive->addEntryFromFile(std::string(name), std::string(filePath)); }
116
117 inline void deleteEntry(const std::string& entryName) { m_zipArchive->deleteEntry(entryName); }
118
119 inline std::string getEntry(const std::string& name) const { return m_zipArchive->getEntry(name); }
120
121 inline void* openEntryStream(std::string_view name) const { return m_zipArchive->openEntryStream(name); }
122 inline int64_t readEntryStream(void* stream, char* buffer, uint64_t size) const
123 { return m_zipArchive->readEntryStream(stream, buffer, size); }
124 inline void closeEntryStream(void* stream) const { m_zipArchive->closeEntryStream(stream); }
125
126 inline bool hasEntry(const std::string& entryName) const { return m_zipArchive->hasEntry(entryName); }
127
128 inline std::vector<std::string> entryNames() const { return m_zipArchive->entryNames(); }
129
130 inline void setCompressionLevel(int level) { m_zipArchive->setCompressionLevel(level); }
131 inline int compressionLevel() const { return m_zipArchive->compressionLevel(); }
132
133 private:
137 struct Concept
138 {
139 public:
143 Concept() = default;
144
148 Concept(const Concept&) = default;
149
153 Concept(Concept&&) noexcept = default;
154
158 virtual ~Concept() = default;
159
164 inline Concept& operator=(const Concept&) = default;
165
170 inline Concept& operator=(Concept&&) noexcept = default;
171
176 inline virtual std::unique_ptr<Concept> clone() const = 0;
177
178 inline virtual bool isValid() const = 0;
179
180 inline virtual bool isOpen() const = 0;
181
182 inline virtual void open(const std::string& fileName) = 0;
183
184 inline virtual void close() const = 0;
185
186 inline virtual void save(const std::string& path) const = 0;
187
188 inline virtual void addEntry(const std::string& name, std::string data) = 0;
189
190 inline virtual void addEntryAllocated(std::string_view name, void* data, size_t size) = 0;
191
192 inline virtual void addEntryFromFile(std::string_view name, std::string_view filePath) = 0;
193
194 inline virtual void deleteEntry(const std::string& entryName) = 0;
195
196 inline virtual std::string getEntry(const std::string& name) const = 0;
197
198 inline virtual void* openEntryStream(std::string_view name) const = 0;
199 inline virtual int64_t readEntryStream(void* stream, char* buffer, uint64_t size) const = 0;
200 inline virtual void closeEntryStream(void* stream) const = 0;
201
202 inline virtual bool hasEntry(const std::string& entryName) const = 0;
203
204 inline virtual std::vector<std::string> entryNames() const = 0;
205
206 inline virtual void setCompressionLevel(int level) = 0;
207 inline virtual int compressionLevel() const = 0;
208 };
209
214 template<typename T>
215 struct Model : Concept
216 {
217 public:
222 explicit Model(const T& x) : ZipType(x) {}
223
228 Model(const Model& other) = default;
229
234 Model(Model&& other) noexcept = default;
235
239 ~Model() override = default;
240
246 inline Model& operator=(const Model& other) = default;
247
253 inline Model& operator=(Model&& other) noexcept = default;
254
259 inline std::unique_ptr<Concept> clone() const override { return std::make_unique<Model<T>>(ZipType); }
260
261 inline bool isValid() const override { return ZipType.isValid(); }
262
263 inline bool isOpen() const override { return ZipType.isOpen(); }
264
265 inline void open(const std::string& fileName) override { ZipType.open(fileName); }
266
267 inline void close() const override { ZipType.close(); }
268
269 inline void save(const std::string& path) const override { ZipType.save(path); }
270
271 inline void addEntry(const std::string& name, std::string data) override { ZipType.addEntry(name, std::move(data)); }
272
273 inline void addEntryAllocated(std::string_view name, void* data, size_t size) override
274 { ZipType.addEntryAllocated(name, data, size); }
275
276 inline void addEntryFromFile(std::string_view name, std::string_view filePath) override
277 { ZipType.addEntryFromFile(name, filePath); }
278
279 inline void deleteEntry(const std::string& entryName) override { ZipType.deleteEntry(entryName); }
280
281 inline std::string getEntry(const std::string& name) const override { return ZipType.getEntry(name); }
282
283 inline void* openEntryStream(std::string_view name) const override { return ZipType.openEntryStream(name); }
284 inline int64_t readEntryStream(void* stream, char* buffer, uint64_t size) const override
285 { return ZipType.readEntryStream(stream, buffer, size); }
286 inline void closeEntryStream(void* stream) const override { ZipType.closeEntryStream(stream); }
287
288 inline bool hasEntry(const std::string& entryName) const override { return ZipType.hasEntry(entryName); }
289
290 inline std::vector<std::string> entryNames() const override { return ZipType.entryNames(); }
291
292 inline void setCompressionLevel(int level) override { ZipType.setCompressionLevel(level); }
293 inline int compressionLevel() const override { return ZipType.compressionLevel(); }
294
295 private:
296 mutable T ZipType;
297 };
298
299 std::unique_ptr<Concept> m_zipArchive;
300 };
301
302} // namespace OpenXLSX
303
304#ifdef _MSC_VER // conditionally enable MSVC specific pragmas to avoid other compilers warning about unknown pragmas
305# pragma warning(pop)
306#endif // _MSC_VER
307
308#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:119
bool isOpen() const
Definition IZipArchive.hpp:101
IZipArchive & operator=(const IZipArchive &other)
Definition IZipArchive.hpp:79
void addEntry(const std::string &name, std::string data)
Definition IZipArchive.hpp:109
int compressionLevel() const
Definition IZipArchive.hpp:131
IZipArchive(const T &zipArchive)
Constructor, taking the target object as an argument.
Definition IZipArchive.hpp:41
void closeEntryStream(void *stream) const
Definition IZipArchive.hpp:124
IZipArchive(IZipArchive &&other) noexcept=default
Move constructor.
~IZipArchive()=default
Destructor.
std::vector< std::string > entryNames() const
Definition IZipArchive.hpp:128
void addEntryFromFile(std::string_view name, std::string_view filePath)
Definition IZipArchive.hpp:114
void addEntryAllocated(std::string_view name, void *data, size_t size)
Definition IZipArchive.hpp:111
bool isValid() const
Definition IZipArchive.hpp:99
void * openEntryStream(std::string_view name) const
Definition IZipArchive.hpp:121
int64_t readEntryStream(void *stream, char *buffer, uint64_t size) const
Definition IZipArchive.hpp:122
void setCompressionLevel(int level)
Definition IZipArchive.hpp:130
void open(const std::string &fileName)
Definition IZipArchive.hpp:103
void deleteEntry(const std::string &entryName)
Definition IZipArchive.hpp:117
IZipArchive & operator=(IZipArchive &&other) noexcept=default
void close() const
Definition IZipArchive.hpp:105
bool hasEntry(const std::string &entryName) const
Definition IZipArchive.hpp:126
Definition IZipArchive.hpp:18
Definition XLCellIterator.hpp:121