Pioneer
FileSourceZip.h
Go to the documentation of this file.
1 // Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #ifndef _FILESOURCEZIP_H
5 #define _FILESOURCEZIP_H
6 
7 #include "FileSystem.h"
8 #include <SDL_stdinc.h>
9 #include <map>
10 #include <string>
11 
12 namespace FileSystem {
13 
14  class FileSourceZip : public FileSource {
15  public:
16  // for now this needs to be FileSourceFS rather than just FileSource,
17  // because we need a FILE* stream access to the .zip file
18  FileSourceZip(FileSourceFS &fs, const std::string &zipPath);
19  virtual ~FileSourceZip();
20 
21  virtual FileInfo Lookup(const std::string &path);
22  virtual RefCountedPtr<FileData> ReadFile(const std::string &path);
23  virtual bool ReadDirectory(const std::string &path, std::vector<FileInfo> &output);
24 
25  private:
26  void *m_archive;
27 
28  struct FileStat {
29  FileStat(Uint32 _index, Uint64 _size, const FileInfo &_info) :
30  index(_index),
31  size(_size),
32  info(_info) {}
33  const Uint32 index;
34  const Uint64 size;
35  const FileInfo info;
36  };
37 
38  struct Directory {
39  std::map<std::string, Directory> subdirs;
40  std::map<std::string, FileStat> files;
41  };
42 
43  Directory m_root;
44 
45  bool FindDirectoryAndFile(const std::string &path, const Directory *&dir, std::string &filename);
46  void AddFile(const std::string &path, const FileStat &fileStat);
47  };
48 
49 } // namespace FileSystem
50 
51 #endif
Definition: FileSystem.h:77
Definition: FileSystem.h:221
Definition: FileSourceZip.h:14
virtual bool ReadDirectory(const std::string &path, std::vector< FileInfo > &output)
Definition: FileSourceZip.cpp:136
virtual ~FileSourceZip()
Definition: FileSourceZip.cpp:47
FileSourceZip(FileSourceFS &fs, const std::string &zipPath)
Definition: FileSourceZip.cpp:16
virtual FileInfo Lookup(const std::string &path)
Definition: FileSourceZip.cpp:97
virtual RefCountedPtr< FileData > ReadFile(const std::string &path)
Definition: FileSourceZip.cpp:111
Definition: FileSystem.h:197
Definition: RefCounted.h:36
Definition: CityOnPlanet.h:27