Skip to content
Snippets Groups Projects
zipfile.h 753 B
Newer Older
  • Learn to ignore specific revisions
  • Vicki Pfau's avatar
    Vicki Pfau committed
    #pragma once
    
    #include "zip.h"
    
    #include <memory>
    #include <string>
    #include <vector>
    
    namespace Retro {
    
    class Zip {
    public:
    	class File {
    	public:
    		File(zip_t*, const std::string& name, zip_file_t* = nullptr);
    		File(File&) = delete;
    
    		~File();
    
    Vicki Pfau's avatar
    Vicki Pfau committed
    
    		std::string readline();
    		ssize_t read(void* buffer, size_t size);
    		ssize_t write(const void* buffer, size_t size);
    
    		bool flush();
    
    	private:
    		zip_t* m_zip;
    		zip_file_t* m_file;
    		std::vector<char> m_buffer;
    		std::string m_name;
    	};
    
    	Zip(const std::string& path);
    	~Zip();
    
    	bool open(bool readwrite = false);
    	void close();
    
    	File* openFile(const std::string& name, bool write = false);
    
    private:
    	std::string m_path;
    
    	zip_t* m_zip = nullptr;
    	std::vector<std::unique_ptr<File>> m_files;
    };
    }