31 class FileSourceUnion;
50 std::string
JoinPath(
const std::string &a,
const std::string &b);
56 std::string
JoinPathBelow(
const std::string &base,
const std::string &path);
60 std::string
GetRelativePath(
const std::string &base,
const std::string &path);
105 const std::string &
GetPath()
const {
return m_path; }
106 std::string
GetName()
const {
return m_path.substr(m_dirLen); }
107 std::string
GetDir()
const {
return m_path.substr(0, m_dirLen); }
117 return (a.m_source == b.m_source && a.m_type == b.m_type && a.m_path == b.m_path);
121 return (a.m_source != b.m_source || a.m_type != b.m_type || a.m_path != b.m_path);
125 int c = a.m_path.compare(b.m_path);
129 if (a.m_type != b.m_type) {
130 return (a.m_type < b.m_type);
132 return (a.m_source < b.m_source);
136 int c = a.m_path.compare(b.m_path);
140 if (a.m_type != b.m_type) {
141 return (a.m_type < b.m_type);
143 return (a.m_source <= b.m_source);
192 FileData(
info, size, static_cast<char *>(std::malloc(size))) {}
240 void ExpandDirQueue();
244 std::deque<FileInfo> m_queue;
245 std::deque<FileInfo> m_dirQueue;
251 explicit FileSource(
const std::string &root,
bool trusted =
false) :
253 m_trusted(trusted) {}
256 const std::string &
GetRoot()
const {
return m_root; }
260 virtual bool ReadDirectory(
const std::string &path, std::vector<FileInfo> &output) = 0;
290 explicit FileSourceFS(
const std::string &root,
bool trusted =
false);
295 virtual bool ReadDirectory(
const std::string &path, std::vector<FileInfo> &output);
307 bool RemoveFile(
const std::string &relativePath);
324 std::vector<FileInfo>
LookupAll(
const std::string &path);
326 virtual bool ReadDirectory(
const std::string &path, std::vector<FileInfo> &output);
329 std::vector<FileSource *> m_sources;
341 return JoinPath(m_source->GetRoot(), GetPath());
346 return m_source->ReadFile(m_path);
Definition: FileSystem.h:189
FileDataMalloc(const FileInfo &info, size_t size)
Definition: FileSystem.h:191
FileDataMalloc(const FileInfo &info, size_t size, char *data)
Definition: FileSystem.h:193
virtual ~FileDataMalloc()
Definition: FileSystem.h:195
Definition: FileSystem.h:159
ByteRange AsByteRange() const
Definition: FileSystem.h:171
FileData(const FileInfo &info, size_t size, char *data)
Definition: FileSystem.h:175
StringRange AsStringRange() const
Definition: FileSystem.h:170
size_t m_size
Definition: FileSystem.h:186
FileData(const FileInfo &info)
Definition: FileSystem.h:179
size_t GetSize() const
Definition: FileSystem.h:164
char * m_data
Definition: FileSystem.h:185
virtual ~FileData()
Definition: FileSystem.h:161
const char * GetData() const
Definition: FileSystem.h:165
const FileInfo & GetInfo() const
Definition: FileSystem.h:163
FileInfo m_info
Definition: FileSystem.h:184
std::string_view AsStringView() const
Definition: FileSystem.h:172
Definition: FileSystem.h:198
Flags
Definition: FileSystem.h:200
@ Recurse
Definition: FileSystem.h:204
@ ExcludeFiles
Definition: FileSystem.h:203
@ IncludeSpecials
Definition: FileSystem.h:202
@ IncludeDirs
Definition: FileSystem.h:201
iter begin()
Definition: FileSystem.h:236
const FileInfo & Current() const
Definition: FileSystem.h:234
void Next()
Definition: FileSystem.cpp:386
~FileEnumerator()
Definition: FileSystem.cpp:375
void AddSearchRoot(const std::string &path)
Definition: FileSystem.cpp:377
bool Finished() const
Definition: FileSystem.h:232
iter end()
Definition: FileSystem.h:237
Definition: FileSystem.h:78
std::string GetName() const
Definition: FileSystem.h:106
friend bool operator<=(const FileInfo &a, const FileInfo &b)
Definition: FileSystem.h:134
friend bool operator!=(const FileInfo &a, const FileInfo &b)
Definition: FileSystem.h:119
FileInfo()
Definition: FileSystem.h:82
bool IsFile() const
Definition: FileSystem.h:98
enum FileType GetType() const
Definition: FileSystem.h:95
std::string GetDir() const
Definition: FileSystem.h:107
std::string GetAbsoluteDir() const
Definition: FileSystem.h:334
Time::DateTime GetModificationTime() const
Definition: FileSystem.h:103
std::string GetAbsolutePath() const
Definition: FileSystem.h:339
bool Exists() const
Definition: FileSystem.h:96
FileType
Definition: FileSystem.h:87
@ FT_SPECIAL
Definition: FileSystem.h:92
@ FT_NON_EXISTENT
Definition: FileSystem.h:91
@ FT_FILE
Definition: FileSystem.h:90
@ FT_DIR
Definition: FileSystem.h:89
RefCountedPtr< FileData > Read() const
Definition: FileSystem.h:344
friend bool operator<(const FileInfo &a, const FileInfo &b)
Definition: FileSystem.h:123
friend bool operator>(const FileInfo &a, const FileInfo &b)
Definition: FileSystem.h:145
friend bool operator>=(const FileInfo &a, const FileInfo &b)
Definition: FileSystem.h:146
bool IsSpecial() const
Definition: FileSystem.h:99
const std::string & GetPath() const
Definition: FileSystem.h:105
bool IsDir() const
Definition: FileSystem.h:97
friend bool operator==(const FileInfo &a, const FileInfo &b)
Definition: FileSystem.h:115
const FileSource & GetSource() const
Definition: FileSystem.h:111
Definition: FileSystem.h:288
virtual bool ReadDirectory(const std::string &path, std::vector< FileInfo > &output)
Definition: FileSystemPosix.cpp:217
FILE * OpenReadStream(const std::string &path)
Definition: FileSystemPosix.cpp:286
virtual FileInfo Lookup(const std::string &path)
Definition: FileSystemPosix.cpp:174
bool IsChildOfRoot(const std::string &path)
Definition: FileSystemPosix.cpp:298
virtual RefCountedPtr< FileData > ReadFile(const std::string &path)
Definition: FileSystemPosix.cpp:182
WriteFlags
Definition: FileSystem.h:299
@ WRITE_TEXT
Definition: FileSystem.h:300
bool MakeDirectory(const std::string &path)
Definition: FileSystemPosix.cpp:280
~FileSourceFS()
Definition: FileSystemPosix.cpp:141
FILE * OpenWriteStream(const std::string &path, int flags=0)
Definition: FileSystemPosix.cpp:292
bool RemoveFile(const std::string &relativePath)
Definition: FileSystemPosix.cpp:325
Definition: FileSystem.h:311
virtual bool ReadDirectory(const std::string &path, std::vector< FileInfo > &output)
Definition: FileSystem.cpp:328
virtual RefCountedPtr< FileData > ReadFile(const std::string &path)
Definition: FileSystem.cpp:278
void AppendSource(FileSource *fs)
Definition: FileSystem.cpp:240
void PrependSource(FileSource *fs)
Definition: FileSystem.cpp:233
void RemoveSource(FileSource *fs)
Definition: FileSystem.cpp:247
std::vector< FileInfo > LookupAll(const std::string &path)
Definition: FileSystem.cpp:266
virtual FileInfo Lookup(const std::string &path)
Definition: FileSystem.cpp:253
FileSourceUnion()
Definition: FileSystem.cpp:229
~FileSourceUnion()
Definition: FileSystem.cpp:231
Definition: FileSystem.h:249
virtual bool ReadDirectory(const std::string &path, std::vector< FileInfo > &output)=0
FileInfo MakeFileInfo(const std::string &path, FileInfo::FileType entryType, Time::DateTime modTime)
Definition: FileSystem.cpp:219
virtual FileInfo Lookup(const std::string &path)=0
FileSource(const std::string &root, bool trusted=false)
Definition: FileSystem.h:251
virtual FileEnumerator Enumerate(int enumeratorFlags)
Definition: FileSystem.h:262
const std::string & GetRoot() const
Definition: FileSystem.h:256
virtual FileEnumerator Recurse(const std::string &path, int enumeratorFlags=0)
Definition: FileSystem.h:272
virtual RefCountedPtr< FileData > ReadFile(const std::string &path)=0
virtual FileEnumerator Enumerate(const std::string &path, int enumeratorFlags)
Definition: FileSystem.h:267
virtual ~FileSource()
Definition: FileSystem.h:254
bool IsTrusted() const
Definition: FileSystem.h:277
Definition: RefCounted.h:36
Definition: RefCounted.h:11
Definition: DateTime.h:84
Definition: CityOnPlanet.h:28
std::string JoinPathBelow(const std::string &base, const std::string &path)
Definition: FileSystem.cpp:103
void Init()
Definition: FileSystem.cpp:189
std::string GetUserDir()
Definition: FileSystemPosix.cpp:117
void Uninit()
Definition: FileSystem.cpp:195
std::string SanitiseFileName(const std::string &a)
Definition: FileSystem.cpp:22
CopyMode
Definition: FileSystem.h:69
std::string GetDataDir()
Definition: FileSystemPosix.cpp:123
std::string NormalisePath(const std::string &path)
Definition: FileSystem.cpp:95
bool CopyDir(FileSource &sourceFS, std::string sourceDir, FileSourceFS &targetFS, std::string targetDir, FileSystem::CopyMode copymode)
Definition: FileSystem.cpp:149
bool IsValidFilename(const std::string &fileName)
Definition: FileSystemPosix.cpp:129
FileSourceUnion gameDataFiles
Definition: FileSystem.cpp:18
std::string JoinPath(const std::string &a, const std::string &b)
Definition: FileSystem.cpp:47
std::string GetRelativePath(const std::string &base, const std::string &path)
Definition: FileSystem.cpp:127
FileSourceFS userFiles(GetUserDir())
Definition: FileSystem.h:37
int info()
Definition: savegamedump.cpp:9
Definition: ByteRange.h:12
Definition: LuaFileSystem.cpp:34
Definition: FileSystem.h:208
FileEnumerator & m_enum
Definition: FileSystem.h:209
std::input_iterator_tag iterator_category
Definition: FileSystem.h:212
bool m_atend
Definition: FileSystem.h:210
reference operator*() const
Definition: FileSystem.h:216
iter & operator++()
Definition: FileSystem.h:219
bool operator!=(const iter &rhs)
Definition: FileSystem.h:217
Definition: StringRange.h:11