Pioneer
Loading...
Searching...
No Matches
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
12namespace 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
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