1
// TODO: Move much of this code to vfs.cpp
11
#include "base/basictypes.h"
13
#include "file/file_util.h"
15
// Direct readers. deallocate using delete [].
16
uint8_t *ReadLocalFile(const char *filename, size_t *size);
20
virtual ~AssetReader() {}
22
virtual uint8_t *ReadAsset(const char *path, size_t *size) = 0;
23
// Filter support is optional but nice to have
24
virtual bool GetFileListing(const char *path, std::vector<FileInfo> *listing, const char *filter = 0) = 0;
25
virtual bool GetFileInfo(const char *path, FileInfo *info) = 0;
26
virtual std::string toString() const = 0;
30
class AssetsAssetReader : public AssetReader {
32
AssetsAssetReader() {}
33
~AssetsAssetReader() {}
35
virtual uint8_t *ReadAsset(const char *path, size_t *size);
36
virtual bool GetFileListing(const char *path, std::vector<FileInfo> *listing, const char *filter);
37
virtual bool GetFileInfo(const char *path, FileInfo *info);
38
virtual std::string toString() const {
45
uint8_t *ReadFromZip(zip *archive, const char* filename, size_t *size);
46
class ZipAssetReader : public AssetReader {
48
ZipAssetReader(const char *zip_file, const char *in_zip_path);
51
virtual uint8_t *ReadAsset(const char *path, size_t *size);
52
virtual bool GetFileListing(const char *path, std::vector<FileInfo> *listing, const char *filter);
53
virtual bool GetFileInfo(const char *path, FileInfo *info);
54
virtual std::string toString() const {
60
char in_zip_path_[256];
64
class DirectoryAssetReader : public AssetReader {
66
DirectoryAssetReader(const char *path) {
67
strncpy(path_, path, ARRAY_SIZE(path_));
68
path_[ARRAY_SIZE(path_) - 1] = '\0';
71
virtual uint8_t *ReadAsset(const char *path, size_t *size);
72
virtual bool GetFileListing(const char *path, std::vector<FileInfo> *listing, const char *filter);
73
virtual bool GetFileInfo(const char *path, FileInfo *info);
74
virtual std::string toString() const {