1 // Licensed GNU LGPL v3 or later: http://www.gnu.org/licenses/lgpl.html 2 3 #ifndef SPECTMORPH_ZIP_HH 4 #define SPECTMORPH_ZIP_HH 5 6 #include <string> 7 #include <vector> 8 9 #include "smutils.hh" 10 11 namespace SpectMorph 12 { 13 14 class ZipReader 15 { 16 void *reader = nullptr; 17 bool need_close = false; 18 int32_t m_error = 0; 19 void *read_mem_stream = nullptr; 20 std::vector<uint8_t> m_data; 21 public: 22 ZipReader (const std::string& filename); 23 ZipReader (const std::vector<uint8_t>& data); 24 ~ZipReader(); 25 26 std::vector<std::string> filenames(); 27 Error error() const; 28 std::vector<uint8_t> read (const std::string& name); 29 30 static bool is_zip (const std::string& name); 31 }; 32 33 class ZipWriter 34 { 35 void *writer = nullptr; 36 bool need_close = false; 37 int32_t m_error = 0; 38 void *write_mem_stream = nullptr; 39 public: 40 enum class Compress { STORE = 0, DEFLATE }; 41 42 ZipWriter (const std::string& filename); 43 ZipWriter(); 44 ~ZipWriter(); 45 void add (const std::string& filename, const std::vector<uint8_t>& data, Compress compress = Compress::DEFLATE); 46 void add (const std::string& filename, const std::string& text, Compress compress = Compress::DEFLATE); 47 void close(); 48 Error error() const; 49 50 std::vector<uint8_t> data(); 51 }; 52 53 } 54 55 #endif 56