31 class FileSourceUnion;
49 std::string
JoinPath(
const std::string &a,
const std::string &b);
55 std::string
JoinPathBelow(
const std::string &base,
const std::string &path);
59 std::string
GetRelativePath(
const std::string &base,
const std::string &path);
104 const std::string &
GetPath()
const {
return m_path; }
105 std::string
GetName()
const {
return m_path.substr(m_dirLen); }
106 std::string
GetDir()
const {
return m_path.substr(0, m_dirLen); }
116 return (a.m_source == b.m_source && a.m_type == b.m_type && a.m_path == b.m_path);
120 return (a.m_source != b.m_source || a.m_type != b.m_type || a.m_path != b.m_path);
124 int c = a.m_path.compare(b.m_path);
128 if (a.m_type != b.m_type) {
129 return (a.m_type < b.m_type);
131 return (a.m_source < b.m_source);
135 int c = a.m_path.compare(b.m_path);
139 if (a.m_type != b.m_type) {
140 return (a.m_type < b.m_type);
142 return (a.m_source <= b.m_source);
191 FileData(info, size, static_cast<char *>(std::malloc(size))) {}
199 explicit FileSource(
const std::string &root,
bool trusted =
false) :
201 m_trusted(trusted) {}
204 const std::string &
GetRoot()
const {
return m_root; }
208 virtual bool ReadDirectory(
const std::string &path, std::vector<FileInfo> &output) = 0;
223 explicit FileSourceFS(
const std::string &root,
bool trusted =
false);
228 virtual bool ReadDirectory(
const std::string &path, std::vector<FileInfo> &output);
255 std::vector<FileInfo>
LookupAll(
const std::string &path);
257 virtual bool ReadDirectory(
const std::string &path, std::vector<FileInfo> &output);
260 std::vector<FileSource *> m_sources;
283 void ExpandDirQueue();
284 void QueueDirectoryContents(
const FileInfo &info);
287 std::deque<FileInfo> m_queue;
288 std::deque<FileInfo> m_dirQueue;
301 return JoinPath(m_source->GetRoot(), GetPath());
306 return m_source->ReadFile(m_path);
Definition FileSystem.h:188
FileDataMalloc(const FileInfo &info, size_t size)
Definition FileSystem.h:190
FileDataMalloc(const FileInfo &info, size_t size, char *data)
Definition FileSystem.h:192
virtual ~FileDataMalloc()
Definition FileSystem.h:194
Definition FileSystem.h:158
ByteRange AsByteRange() const
Definition FileSystem.h:170
FileData(const FileInfo &info, size_t size, char *data)
Definition FileSystem.h:174
StringRange AsStringRange() const
Definition FileSystem.h:169
size_t m_size
Definition FileSystem.h:185
FileData(const FileInfo &info)
Definition FileSystem.h:178
size_t GetSize() const
Definition FileSystem.h:163
char * m_data
Definition FileSystem.h:184
virtual ~FileData()
Definition FileSystem.h:160
const char * GetData() const
Definition FileSystem.h:164
const FileInfo & GetInfo() const
Definition FileSystem.h:162
FileInfo m_info
Definition FileSystem.h:183
std::string_view AsStringView() const
Definition FileSystem.h:171
Definition FileSystem.h:263
Flags
Definition FileSystem.h:265
@ Recurse
Definition FileSystem.h:269
@ ExcludeFiles
Definition FileSystem.h:268
@ IncludeSpecials
Definition FileSystem.h:267
@ IncludeDirs
Definition FileSystem.h:266
const FileInfo & Current() const
Definition FileSystem.h:280
void Next()
Definition FileSystem.cpp:385
~FileEnumerator()
Definition FileSystem.cpp:374
void AddSearchRoot(const std::string &path)
Definition FileSystem.cpp:376
bool Finished() const
Definition FileSystem.h:278
Definition FileSystem.h:77
std::string GetName() const
Definition FileSystem.h:105
friend bool operator<=(const FileInfo &a, const FileInfo &b)
Definition FileSystem.h:133
friend bool operator!=(const FileInfo &a, const FileInfo &b)
Definition FileSystem.h:118
FileInfo()
Definition FileSystem.h:81
bool IsFile() const
Definition FileSystem.h:97
enum FileType GetType() const
Definition FileSystem.h:94
std::string GetDir() const
Definition FileSystem.h:106
std::string GetAbsoluteDir() const
Definition FileSystem.h:294
Time::DateTime GetModificationTime() const
Definition FileSystem.h:102
std::string GetAbsolutePath() const
Definition FileSystem.h:299
bool Exists() const
Definition FileSystem.h:95
FileType
Definition FileSystem.h:86
@ FT_SPECIAL
Definition FileSystem.h:91
@ FT_NON_EXISTENT
Definition FileSystem.h:90
@ FT_FILE
Definition FileSystem.h:89
@ FT_DIR
Definition FileSystem.h:88
RefCountedPtr< FileData > Read() const
Definition FileSystem.h:304
friend bool operator<(const FileInfo &a, const FileInfo &b)
Definition FileSystem.h:122
friend bool operator>(const FileInfo &a, const FileInfo &b)
Definition FileSystem.h:144
friend bool operator>=(const FileInfo &a, const FileInfo &b)
Definition FileSystem.h:145
bool IsSpecial() const
Definition FileSystem.h:98
const std::string & GetPath() const
Definition FileSystem.h:104
bool IsDir() const
Definition FileSystem.h:96
friend bool operator==(const FileInfo &a, const FileInfo &b)
Definition FileSystem.h:114
const FileSource & GetSource() const
Definition FileSystem.h:110
Definition FileSystem.h:221
virtual bool ReadDirectory(const std::string &path, std::vector< FileInfo > &output)
Definition FileSystemPosix.cpp:205
FILE * OpenReadStream(const std::string &path)
Definition FileSystemPosix.cpp:274
virtual FileInfo Lookup(const std::string &path)
Definition FileSystemPosix.cpp:162
virtual RefCountedPtr< FileData > ReadFile(const std::string &path)
Definition FileSystemPosix.cpp:170
WriteFlags
Definition FileSystem.h:232
@ WRITE_TEXT
Definition FileSystem.h:233
bool MakeDirectory(const std::string &path)
Definition FileSystemPosix.cpp:268
~FileSourceFS()
Definition FileSystemPosix.cpp:129
FILE * OpenWriteStream(const std::string &path, int flags=0)
Definition FileSystemPosix.cpp:280
Definition FileSystem.h:242
virtual bool ReadDirectory(const std::string &path, std::vector< FileInfo > &output)
Definition FileSystem.cpp:327
virtual RefCountedPtr< FileData > ReadFile(const std::string &path)
Definition FileSystem.cpp:277
void AppendSource(FileSource *fs)
Definition FileSystem.cpp:239
void PrependSource(FileSource *fs)
Definition FileSystem.cpp:232
void RemoveSource(FileSource *fs)
Definition FileSystem.cpp:246
std::vector< FileInfo > LookupAll(const std::string &path)
Definition FileSystem.cpp:265
virtual FileInfo Lookup(const std::string &path)
Definition FileSystem.cpp:252
FileSourceUnion()
Definition FileSystem.cpp:228
~FileSourceUnion()
Definition FileSystem.cpp:230
Definition FileSystem.h:197
FileInfo MakeFileInfo(const std::string &path, FileInfo::FileType entryType, Time::DateTime modTime)
Definition FileSystem.cpp:218
virtual bool ReadDirectory(const std::string &path, std::vector< FileInfo > &output)=0
virtual FileInfo Lookup(const std::string &path)=0
FileSource(const std::string &root, bool trusted=false)
Definition FileSystem.h:199
const std::string & GetRoot() const
Definition FileSystem.h:204
virtual RefCountedPtr< FileData > ReadFile(const std::string &path)=0
virtual ~FileSource()
Definition FileSystem.h:202
bool IsTrusted() const
Definition FileSystem.h:210
Definition RefCounted.h:36
Definition RefCounted.h:11
Definition CityOnPlanet.h:27
std::string JoinPathBelow(const std::string &base, const std::string &path)
Definition FileSystem.cpp:102
void Init()
Definition FileSystem.cpp:188
std::string GetUserDir()
Definition FileSystemPosix.cpp:114
void Uninit()
Definition FileSystem.cpp:194
std::string SanitiseFileName(const std::string &a)
Definition FileSystem.cpp:21
CopyMode
Definition FileSystem.h:68
std::string GetDataDir()
Definition FileSystemPosix.cpp:120
std::string NormalisePath(const std::string &path)
Definition FileSystem.cpp:94
bool CopyDir(FileSource &sourceFS, std::string sourceDir, FileSourceFS &targetFS, std::string targetDir, FileSystem::CopyMode copymode)
Definition FileSystem.cpp:148
FileSourceUnion gameDataFiles
Definition FileSystem.cpp:17
std::string JoinPath(const std::string &a, const std::string &b)
Definition FileSystem.cpp:46
std::string GetRelativePath(const std::string &base, const std::string &path)
Definition FileSystem.cpp:126
FileSourceFS userFiles(GetUserDir())
Definition FileSystem.h:37
Definition ByteRange.h:12
Definition StringRange.h:11